captains-log
A light-weight customizable logger implementation for rust
Features
-
Allow customize log format and time format.
-
Supports signal listening for log-rotate.
-
Supports multiple log files, each with its own log level.
-
Supports hook on panic.
-
On default supports multi-process/thread/coroutine log into the same file. Atomic line appending can be done on Linux
-
Provides
LogFilterfor fine-grain control to log level. -
Provides
LogFilterKVfor API logging with additional key. For example, you can set req_id in LogFilterKV, and track the complete request handling procedure from log. -
For test suits usage:
Allow dynamic reconfigure logger setting in different test function. (NOTE: currently signal_listener does not support reconfigure).
Provides an attribute macro #[logfn] to wrap test function. Logging test-start and test-end.
Dependency
[]
= { = "0.4", = ["std", "kv_unstable"] }
= "0.2"
Fast setup example:
You can refer to various preset recipe in recipe module, including console & file output.
// #[macro_use]
// extern crate captains_log;
// #[macro_use]
// extern crate log;
use ;
use split_error_file_logger;
let log_builder = split_error_file_logger;
log_builder.build;
// non-error msg will only appear in /tmp/test.log
debug!;
info!;
// will appear in both /tmp/test.log and /tmp/test.log.wf
error!;
Customize format example
extern crate signal_hook;
extern crate chrono;
use *;
let debug_format = new;
let debug_file = new;
let config = default
.signal
.file;
config.build;
Fine-grain module-level log control
Place LogFilter in Arc and share among coroutines. Log level can be changed on-the-fly.
use Arc;
use *;
set_max_level;
let logger_io = new;
let logger_req = new;
logger_io.set_level;
logger_req.set_level;
logger_debug!;
logger_debug!;
logger_error!;
API-level log handling
Request log can be track by custom key req_id, which kept in LogFilterKV.
use *;
let builder = file_logger_custom;
builder.build.expect;
let logger = new;
logger_debug!;
logger_debug!;
logger_info!;