#config-file #cargo-toml #log #log-file #logging #flexi-logger

flexi_config

通过文件提供flex_config的配置

2个不稳定版本

使用旧的Rust 2015

0.1.0 2016年4月27日
0.0.1 2016年4月24日

#109 in #log-file

AML/Apache-2.0

275KB
5K SLoC

flexi_config

Rust包,提供flexi_logger的配置文件


lib.rs:

此包允许程序从配置文件配置flexi_logger。为此,您首先需要创建配置文件。这可以通过读取Cargo.toml动态完成。以下代码展示了从Cargo.toml文件创建log.toml文件

use flexi_config::FlexiConfig;

// Read the Cargo.toml file for the project
let mut config = FlexiConfig::from_cargo_file("Cargo.toml").unwrap();

// Change the default directory to "logs" for the log files
config.disk_dir = Some(String::from("logs"));

// Create a config file named log.toml
config.to_toml_file("log.toml").unwrap();

然后当您的程序真正运行时,您将加载配置文件并使用它初始化flexi_logger。以下代码是示例:

use flexi_config::{FlexiConfig, Target};

// Load the log.toml configuration file
let mut config = FlexiConfig::from_toml_file("log.toml").unwrap();

// Force the logging to a file instead of stderr (ignoring the config file settings).
// Then applies the configuration to flexi_logger.
config.target(Target::Disk).apply();

配置文件

如果需要修改配置,可以通过调用各种方法和访问结构体的字段以程序方式完成。或者您可以手动编辑配置文件。

配置文件分为三个部分:[common]、[disk]和[depends]。

[common]

本节处理配置flexi_logger的一般设置。

application

此值不应更改。它必须与Cargo.toml文件中定义的应用程序内部名称匹配,该名称是“name”属性。

disk_format & stderr_format

这些设置定义了将日志记录到磁盘或stderr时的日志消息格式。有三个预定义的格式,这些格式实际上由flexi_logger定义。

  • "default" - 使用 flexi_logger::default_format 函数来格式化日志消息。更多信息可以在这里找到。
  • "detailed" - 使用 flexi_logger::detailed_format 函数来格式化日志消息。更多信息可以在这里找到。
  • "opt" - 使用 flexi_logger::opt_format 函数来格式化日志消息。更多信息可以在这里找到。

此外,您还可以为日志消息定义自定义格式。自定义格式可以按照您希望的方式定义,并在{}字符之间插入特殊控制代码。以下代码是支持的:

  • f - 插入生成日志消息的源文件名称。
  • p - 插入优先级(错误、警告、信息、调试、跟踪)作为一个单个小写字母。'e'代表错误,'w'代表警告,'i'代表信息,'d'代表调试,'t'代表跟踪。
  • P - 与 p 相同,但使用大写字母。
  • pp - 以5个字符小写单词的形式插入优先级(错误、警告、信息、调试、跟踪)。'error' 表示错误,'warn' 表示警告,'info' 表示信息,'debug' 表示调试,'trace' 表示跟踪。'warn' 和 'info' 后会附加一个空格,使它们成为5个字符。
  • PP - 与 pp 相同,但使用大写字母。
  • l - 插入源文件中日志消息的行号。
  • m - 插入文件所属的模块。
  • c - 插入文件所属的crate。
  • t - 插入当前时间。
  • e - 插入事件或实际的日志消息。

因此,自定义格式可以是:"{PP} | {c} | {f}:{l} | {e}",这将输出优先级,然后是crate,然后是带有行号的文件,最后是日志消息。如果您想输出大括号,则需要用反斜杠转义,如"\{ {e} \}"。

此外,在显示 'f'、'l'、'm'、'c' 或 'e' 时,您可以指定宽度以执行左对齐、右对齐或截断。

element :=  '{' type:[[align]width[trim]] '}'
align := '<' | '>'
width := integer
trim := '-' | ''

如果您想将文件名右对齐到20个字符,则指定 "{f:>20}"。如果文件名(包括路径)小于20个字符,则在名称之前插入空格,直到长度为20个字符。如果您想确保长度不超过20个字符,则可以添加 trim。

"{c:>20-}" 会输出crate,如果长度小于20个字符,则会在前面添加空格,如果长度较长,则显示crate名称的最后20个字符。当启用trim时,如果元素右对齐,则从值的开始删除,如果左对齐,则从字符串的末尾删除。

Trim也可以不进行对齐使用,因此您可以定义:"{e:64-}",这将显示最多64个字符的日志消息,然后丢弃任何剩余的字符。

要输出时间,您必须指定它应该显示。在 '{' 和 '}' 字符内,您需要添加冒号(:)后跟时间格式,即 "{t:<时间格式>}"。时间格式有其自己的特殊代码

  • %b - 插入3个字符的月份名称小写,例如jan、feb、mar。
  • %B - 与 '%b' 相同,但使用大写字母。
  • %d - 插入月份中的天,为两位数,从01到31。
  • %f - 插入分数秒(毫秒),为3位数,从000到999。
  • %H - 插入一天中的小时(24小时制),从00到23。
  • %I - 插入一天中的小时(12小时制),从01到12。
  • %m - 插入月份的数字格式,为两位数,从01到12。
  • %M - 插入小时中的分钟,为两位数,从0到59。
  • %p - 根据当前时间插入 'am' 或 'pm'。
  • %P - 与 %p 相同,但使用大写字母。
  • %S - 插入秒,为两位数,从00到59。
  • %y - 插入年份的最后两位数字,从00到99。
  • %Y - 插入完整的4位年份。
  • %% - 插入一个百分号(%)。

您可以使用 "{t:%d/%m/%Y %H:%M:%S.%f}" 来显示日期/月份/年份 小时:分钟/秒.毫秒的时间格式。

将这些组合在一起,以下格式字符串基本上可以复现 flexi_logger 的详细格式

[{t:%Y-%m-%d %H:%M:%S.%f}] {PP} [{m:32}] {f:32}:{l:>4}: {e}

优先级

这定义了最低优先级的日志消息。此处的有效值包括

  • trace - 最低级别的日志消息。
  • debug - 仍为低级别,但低于 trace。
  • info - 提供信息性日志消息,高于 trace 和 debug。
  • warn - 警告潜在问题,这是第二高的日志消息。
  • error - 最高优先级,报告错误情况。

目标

标识消息要记录的位置。此选项只有两个值:“stderr”或“disk”。

[disk]

本节定义了一些只在记录到磁盘时使用的设置。

dir

标识要写入日志文件的目录。此值也可以为 false,如果您希望文件在当前目录中创建。

dup_err

Flexi_logger 可以将任何“error”消息复制到磁盘和 stdout。如果您希望“error”日志消息也写入 stdout,请将其设置为“true”。

dup_info

Flexi_logger 可以将任何“info”消息复制到磁盘和 stdout。如果您希望“info”日志消息也写入 stdout,请将其设置为“true”。

extension

为创建的日志文件提供扩展名。默认为“log”,但可以根据需要更改。

max_size

默认值为“false”,表示不限制日志文件大小,只需每天创建一个新文件。如果设置为 true,则指定文件在创建新文件之前可以增长的兆字节数。

name_suffix

默认值为“false”。如果您希望向文件名添加自定义后缀,则可以使用此参数指定。这对应于 flexi_logger 的 LogConfig 结构的区分字段。

timestamp

此值控制文件创建时是否将时间戳添加到文件名中。

[depends]

本节定义了应用程序任何依赖包的日志优先级。如果您的应用程序依赖于“rand”和“time”包,可以添加以下内容

[depends]
rand = "warn"
time = "trace"

以启用“rand”的警告消息及以上,并启用“time”的所有日志消息。优先级定义方式与[common]部分相同,因此有

  • trace - 最低级别的日志消息。
  • debug - 仍为低级别,但低于 trace。
  • info - 提供信息性信息,高于 trace 和 debug。
  • warn - 警告潜在问题,这是第二高的日志消息。
  • error - 最高优先级,报告错误情况。

依赖关系

~7MB
~130K SLoC