Crates.io | redis_logger |
lib.rs | redis_logger |
version | 0.3.2 |
source | src |
created_at | 2024-02-16 15:06:59.495908 |
updated_at | 2024-02-21 11:27:34.187522 |
description | A logger implementing the log::Log trait that writes log messages to a Redis pub/sub channel, a stream or both using the redis_rs crate |
homepage | |
repository | https://github.com/8192K/redis_logger |
max_upload_size | |
id | 1142523 |
size | 46,501 |
This log::Log
implementation allows to log to a Redis server. It supports writing to any number of pub/sub channels or streams or both.
You can specify custom encoders for pub/sub and stream log messages. Using the default_encoders
feature default implementations for the encoders are available. This feature is disabled by default.
If you enable the shared_logger
feature you can use the RedisLogger
inside a simplelog::CombinedLogger
.
Add the dependency to your Cargo.toml
:
[dependencies]
log = "0.4"
redis = "0.24"
redis_logger = "0.3"
How to use in your application:
Build a RedisLoggerConfig
using the RedisLoggerConfigBuilder
methods. Specify a connection and at least one pub/sub or stream channel. Use this configuration to either instantiate a RedisLogger
instance with RedisLogger::new
if you wish to use this logger with other loggers (like the parallel_logger crate or CombinedLogger logger from the simplelog
crate) or use the RedisLogger::init
method to initialize the logger as the only logger for the application.
A simple example using the default_encoders
feature and setting the RedisLogger
as the only logger would look like this:
fn main() {
let redis_client = redis::Client::open(REDIS_URL).unwrap();
let redis_connection = redis_client.get_connection().unwrap();
RedisLogger::init(
LevelFilter::Debug,
RedisLoggerConfigBuilder::build_with_pubsub_default(
redis_connection,
vec!["logging".into()],
),
);
}
This broader example uses RedisLogger
inside a ParallelLogger
and encodes messages for pub/sub using the bincode
crate and a custom PubSubEncoder
:
struct BincodeRedisEncoder;
impl PubSubEncoder for BincodeRedisEncoder {
fn encode(&self, record: &log::Record) -> Vec<u8> {
let mut slice = [0u8; 2000];
let message = SerializableLogRecord::from(record);
let size = bincode::encode_into_slice(message, &mut slice, BINCODE_CONFIG).unwrap();
let slice = &slice[..size];
slice.to_vec()
}
}
fn main() {
let redis_client = redis::Client::open(REDIS_URL).unwrap();
let redis_connection = redis_client.get_connection().unwrap();
ParallelLogger::init(
log::LevelFilter::Debug,
ParallelMode::Sequential,
vec![
FileLogger::new(LevelFilter::Debug, "log_file.log"),
TerminalLogger::new(LevelFilter::Info),
RedisLogger::new(
LevelFilter::Debug,
RedisLoggerConfigBuilder::build_with_pubsub(
redis_connection,
vec!["logging".into()],
BincodeRedisEncoder {},
),
),
],
);
}
redis_rs
(like fred
).Licensed under either of