#logging #log #logger #log-file #log-level

x-log4rs-sqlite

实验性 log4rs 追加器,用于将日志保存到 SQLite 数据库

5 个版本

0.1.0 2024 年 3 月 7 日
0.0.4 2023 年 11 月 25 日
0.0.3 2023 年 10 月 7 日
0.0.2 2023 年 10 月 7 日
0.0.1 2023 年 9 月 14 日

#594数据库接口

Download history 23/week @ 2024-03-29 1/week @ 2024-04-05 51/week @ 2024-04-26 2/week @ 2024-05-03

每月 104 次下载

MIT/Apache

9KB
109

x-log4rs-sqlite

实验性 log4rs 追加器,用于写入 SQLite 数据库。

尚未准备好用于生产环境,但如果您希望以程序方式处理日志,并且可以承受性能成本,则可能有用。

使用方法

要通过配置文件(例如 log4rs.yaml)使用自定义追加器,您必须在配置反序列化器中注册该追加器,然后在配置文件中引用该追加器。

目前日志条目在追加器中被缓冲在内存中,然后以批量方式写入数据库。这在一个写入日志的线程中以阻塞方式发生,这意味着这种方式的日志记录成本很高。

需要显式使用 log::logger().flush() 清除缓冲的条目,否则它们将会丢失。

缓冲区大小目前不可配置,并硬编码为值 1024

示例最小程序

use log::info;

fn main() -> anyhow::Result<()> {
    let deserializers = {
        let mut d = log4rs::config::Deserializers::new();
        d.insert("sqlite", x_log4rs_sqlite::SqliteLogAppenderDeserializer {});
        d
    };
    log4rs::init_file("log4rs.yaml", deserializers)?;
    info!("hello, world");
    log::logger().flush();
    Ok(())
}

示例 log4rs.yaml 配置文件

appenders:
  sqlite:
    kind: sqlite
    path: log.sqlite
root:
  level: debug
  appenders:
    - sqlite

模式

如果数据库文件不存在,则将使用默认模式创建它,该模式目前为

create table if not exists entry (
    id varchar(128) not null primary key,
    ts varchar(128) not null,
    level varchar(128) not null,
    message varchar(8192) not null
);

create index if not exists entry_ts_i on entry (ts);

字段包括

  • id:条目的 uuid,由追加器在记录日志时生成,
  • ts:日志条目的时间戳作为字符串,由追加器计算,格式为 2023-09-23 19:20:30.401272,在 UTC 时区,但没有时区指示符,具有微秒精度,
  • level:log4rs 日志级别作为字符串,
  • message:日志条目消息作为字符串。

示例数据

sqlite> select id, level, ts, message from entry order by ts desc, id desc limit 5;
78a00529-625f-4d3c-af74-806b7c74b955|INFO|2023-09-26 18:47:26.413391|test log message 999999
09a402b5-ae3f-43ef-91ce-fe6e6c9e6fdb|INFO|2023-09-26 18:47:26.413386|test log message 999998
a906fc6c-44b1-4147-a268-8ea88aac119b|INFO|2023-09-26 18:47:26.413381|test log message 999997
151240f6-75c2-4163-85ba-ff316bffc028|INFO|2023-09-26 18:47:26.413375|test log message 999996
41f3456a-ea9e-488c-a6d8-7b171ee909a3|INFO|2023-09-26 18:47:26.413370|test log message 999995

如果日志文件存在,但其模式与上述不兼容,则日志将会丢失,并且 log4rs 将在记录日志时将错误消息打印到标准输出。

数据库模式,如整个 crate,应被视为实验性和不稳定的,并且可以在不发出警告的情况下在不兼容的方式下在版本之间更改。

依赖关系

~25MB
~477K SLoC