#output-format #log #logging #log-file #logging-tracing #tracing

rlg

A Rust library that implements application-level logging with a simple, readable output format

4个版本

0.0.4 2024年5月6日
0.0.3 2024年3月7日
0.0.2 2023年12月6日
0.0.1 2023年2月6日

#71 in 调试

Download history 1027/week @ 2024-04-25 1662/week @ 2024-05-02 1280/week @ 2024-05-09 1016/week @ 2024-05-16 977/week @ 2024-05-23 651/week @ 2024-05-30 921/week @ 2024-06-06 964/week @ 2024-06-13 1154/week @ 2024-06-20 787/week @ 2024-06-27 687/week @ 2024-07-04 1166/week @ 2024-07-11 851/week @ 2024-07-18 1217/week @ 2024-07-25 1039/week @ 2024-08-01 1160/week @ 2024-08-08

4,491 每月下载次数
用于 12 个crate(7 直接使用)

MIT/Apache

52KB
718 代码行

RustLogs (RLG) logo

RustLogs (RLG)

A Rust library that implements application-level logging with a simple, readable output format.

Made With Love Crates.io Lib.rs Docs.rs License

divider

概述

RustLogs (RLG) 是一个Rust库,它以简单、易读的格式实现应用程序级别的日志记录。它提供日志API和各种辅助宏,以简化常见的日志任务。

特性

  • 支持多种日志级别: ALLDEBUGDISABLEDERRORFATALINFONONETRACEVERBOSEWARNING
  • 提供易于解析和过滤的结构化日志格式
  • 与多种输出格式兼容,包括
    • 通用事件格式(CEF)
    • 扩展日志格式(ELF)
    • Graylog扩展日志格式(GELF)
    • JavaScript对象表示法(JSON)
    • NCSA通用日志格式(CLF)
    • W3C扩展日志文件格式(W3C)
    • 系统日志格式
    • Apache访问日志格式
    • Logstash格式
    • Log4j XML格式
    • NDJSON(换行分隔JSON)

安装

要在您的Rust项目中使用 rlg,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
rlg = "0.0.4"

要求

rlg 需要 Rust 1.60 或更高版本。

文档

ℹ️ 信息:请访问我们的 网站 获取更多信息,并在 docs.rslib.rscrates.io 上找到我们的文档。

用法

基本日志记录

use rlg::log::Log;
use rlg::log_format::LogFormat;
use rlg::log_level::LogLevel;

// Create a new log entry
let log_entry = Log::new(
    "12345",
    "2023-01-01T12:00:00Z",
    &LogLevel::INFO,
    "MyComponent",
    "This is a sample log message",
    &LogFormat::JSON, // Choose from various formats like JSON, Syslog, NDJSON, etc.
);

// Log the entry asynchronously
tokio::runtime::Runtime::new().unwrap().block_on(async {
    log_entry.log().await.unwrap();
});

自定义日志配置

use rlg::config::Config;
use rlg::log::Log;
use rlg::log_format::LogFormat;
use rlg::log_level::LogLevel;

// Customize log file path
std::env::set_var("LOG_FILE_PATH", "/path/to/log/file.log");

// Load custom configuration
let config = Config::load();

// Create a new log entry with custom configuration
let log_entry = Log::new(
    "12345",
    "2023-01-01T12:00:00Z",
    &LogLevel::INFO,
    "MyComponent",
    "This is a sample log message",
    &LogFormat::ApacheAccessLog
);

// Log the entry asynchronously
tokio::runtime::Runtime::new().unwrap().block_on(async {
    log_entry.log().await.unwrap();
});

配置

默认情况下,RustLogs (RLG) 将日志记录到当前目录中名为 "RLG.log" 的文件。您可以通过设置 LOG_FILE_PATH 环境变量来自定义日志文件路径。

错误处理

在日志操作过程中可能会发生错误,例如文件I/O错误或格式错误。`log()` 方法返回一个 `Result<(), io::Error>`,表示日志操作的结果。您应该在代码中适当地处理潜在的错误。

use rlg::log::Log;
use rlg::log_format::LogFormat;
use rlg::log_level::LogLevel;

// Create a new log entry
let log_entry = Log::new(
    "12345",
    "2023-01-01T12:00:00Z",
    &LogLevel::INFO,
    "MyComponent",
    "This is a sample log message",
    &LogFormat::NDJSON, // Using NDJSON format for this example
);

// Log the entry asynchronously and handle potential errors
tokio::runtime::Runtime::new().unwrap().block_on(async {
    match log_entry.log().await {
        Ok(_) => println!("Log entry successfully written"),
        Err(err) => eprintln!("Error logging entry: {}", err),
    }
});

宏定义

RustLogs (RLG) 提供了一系列有用的宏来简化日志任务

  • macro_log!:创建一个新的日志条目,具有指定的参数。
  • macro_info_log!:创建一个包含默认会话ID和格式的信息日志。
  • macro_print_log!:将日志打印到标准输出。
  • macro_log_to_file!:异步将消息记录到文件。
  • macro_warn_log!:创建一个警告日志。
  • macro_error_log!:创建一个包含默认格式的错误日志。
  • macro_set_log_format_clf!:如果尚未定义,则将日志格式设置为CLF。
  • macro_debug_log!:根据 `debug_enabled` 功能标志有条件地记录消息。
  • macro_trace_log!:创建一个跟踪日志。
  • macro_fatal_log!:创建一个致命日志。
  • macro_log_if!:根据谓词有条件地记录消息。
  • macro_log_with_metadata!:记录带有附加元数据的消息。

有关如何使用这些宏的更多详细信息,请参阅文档

示例

`RLG` 随附一些示例,您可以从中开始。示例位于项目的 `examples` 目录中。要运行示例,请克隆存储库,并在项目根目录中从终端运行以下命令

cargo run --example rlg

语义版本策略

为了提高透明度并努力保持向后兼容性,`RLG` 遵循 语义版本

许可证

该项目根据MIT许可证和Apache许可证(版本2.0)的条款进行许可。

贡献

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据Apache-2.0许可证定义,应按上述方式双许可,而不附加任何其他条款或条件。

致谢

特别感谢Rust Reddit社区为我们提供了大量关于如何改进此项目的有用建议。

依赖关系

~7-33MB
~486K SLoC