Crate captains_log

Source
Expand description

§captains-log

A light-weight logger for rust, implementation base on the crate log.

§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 LogFilter for coroutine-based programs. You can set req_id in LogFilter and output to log files

  • 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

[dependencies]
log = { version = "0.4", features = ["std", "kv_unstable"] }
captains_log = "0.1"

§Fast setup eample:

/// #[macro_use]
/// extern crate captains_log;
/// #[macro_use]
/// extern crate log;
use log::{debug, info, error};
use captains_log::*;
use captains_log::recipe::split_error_file_logger;

let log_builder = split_error_file_logger("/tmp", "test", log::Level::Debug);
setup_log(log_builder);

// non-error msg will only appear in /tmp/test.log
debug!("Set a course to Sol system");
info!("Engage");

// will appear in both /tmp/test.log and /tmp/test.log.wf
error!("Engine over heat!");

§Customize format example

extern crate signal_hook;
extern crate chrono;
use captains_log::*;
fn format_f(r: FormatRecord) -> String {
    let time = r.time();
    let level = r.level();
    let file = r.file();
    let line = r.line();
    let msg = r.msg();
    format!("{time}|{level}|{file}:{line}|{msg}\n").to_string()
}
let debug_format = LogFormat::new(
    "%Y%m%d %H:%M:%S%.6f",
    format_f,
);
let debug_file = LogFile::new(
    "/tmp", "test.log", log::Level::Trace, debug_format);
let config = Builder::default()
    .signal(signal_hook::consts::SIGINT)
    .file(debug_file);

setup_log(config);

Modules§

macros
recipe

Macros§

do_log_filter
log_assert
log_assert_eq
log_debug_assert
log_debug_assert_eq
log_println
logger_assert
logger_assert_eq
logger_debug
logger_debug_assert
logger_debug_assert_eq
logger_error
logger_info
logger_trace
logger_warn

Structs§

Builder
Global config to setup logger See crate::recipe for usage
FormatRecord
LogFile
Config for file sink
LogFilter
A LogFilter supports concurrent control the log level. Use in combine with macros logger_XXX
LogFormat
Custom formatter which adds into a log sink

Enums§

LogLevel
An enum representing the available verbosity levels of the logger.
LogLevelFilter
An enum representing the available verbosity level filters of the logger.

Functions§

setup_log
Initialize global logger from Builder

Attribute Macros§

logfn
Logs the result of the function it’s above.