查看源码 logger_std_h (内核 v10.2)
Logger 的标准处理器。
这是 Logger 的标准处理器。可以将此处理器的多个实例添加到 Logger 中,每个实例将日志打印到 standard_io
、 standard_error
或文件。
该处理器具有过载保护机制,可以在高负载的日志事件期间保持处理器进程和内核应用程序的运行。过载保护的工作原理以及如何配置它,请参阅 用户指南
。
要添加标准处理器的新实例,请使用 logger:add_handler/3
。处理器配置参数是一个映射,其中可以包含通用配置参数,如用户指南
中所述,以及处理器特定的参数。特定的数据存储在一个键为 config
的子映射中,可以包含以下参数
type =
io:standard_io/0
|
io:standard_error/0
| file | {device,
io:device/0
}
- 指定日志目标。该值在添加处理器时设置,并且在运行时无法更改。
默认为
standard_io
,除非给定了参数file
,在这种情况下默认为file
。file =
file:filename/0
- 当处理器类型为file
时,指定日志文件的名称。该值在添加处理器时设置,并且在运行时无法更改。
默认为与当前目录中处理器标识相同的名称。
modes = [
file:mode/0
]
- 指定打开日志文件时使用的文件模式,请参阅file:open/2
。如果未指定modes
,则使用的默认列表为[raw,append,delayed_write]
。如果指定了modes
,则该列表将替换默认模式列表,并进行以下调整- 如果在列表中找不到
raw
,则会添加它。 - 如果在列表中找不到
write
、append
或exclusive
中的任何一个,则会添加append
。 - 如果在列表中找不到
delayed_write
或{delayed_write,Size,Delay}
中的任何一个,则会添加delayed_write
。
日志文件始终使用 UTF-8 编码。无法通过设置模式
{encoding,Encoding}
来更改编码。该值在添加处理器时设置,并且在运行时无法更改。
默认为
[raw,append,delayed_write]
。- 如果在列表中找不到
max_no_bytes =
pos_integer/0
| infinity
- 此参数指定是否应轮换日志文件。值infinity
表示日志文件将无限增长,而整数值指定文件轮换的文件大小(字节)。默认为
infinity
。max_no_files =
non_neg_integer/0
- 此参数指定要保留的轮换日志文件存档的数量。仅当max_no_bytes
设置为整数值时,此参数才有效。日志存档的名称为
FileName.0
、FileName.1
、...FileName.N
,其中FileName
是当前日志文件的名称。FileName.0
是最新的存档。N
的最大值为max_no_files
减 1 的值。请注意,将此值设置为
0
并不会关闭轮换。它仅指定不保留任何存档。默认为
0
。compress_on_rotate =
boolean/0
- 此参数指定是否应压缩轮换的日志文件存档。如果设置为true
,则所有存档都将使用gzip
压缩,并重命名为FileName.N.gz
如果
max_no_bytes
的值为infinity
,则compress_on_rotate
无效。默认为
false
。file_check =
non_neg_integer/0
- 当logger_std_h
记录到文件时,它会在每次写入操作之前读取日志文件的文件信息。这是为了确保该文件仍然存在,并且具有与打开时相同的 inode。这会带来一些性能损失,但可以确保在文件被外部参与者删除或重命名的情况下不会丢失任何日志事件。为了尽量减少性能损失,可以将
file_check
参数设置为正整数值N
。只要自上次读取以来经过的时间不超过N
毫秒,处理器就会跳过在写入之前读取文件信息。请注意,当
file_check
值增大时,丢失日志事件的风险也会增加。默认为 0。
filesync_repeat_interval =
pos_integer/0
| no_repeat
- 此值以毫秒为单位,指定处理器执行文件同步操作以将缓冲的数据写入磁盘的频率。处理器会重复尝试该操作,但仅在实际记录了某些内容时才执行新的同步。如果将
no_repeat
设置为值,则禁用重复的文件同步操作,并且由操作系统设置来决定数据写入磁盘的速度。用户也可以调用filesync/1
函数来执行文件同步。默认为
5000
毫秒。
还存在其他配置参数,用于自定义过载保护行为。标准处理器和 disk_log 处理器都使用相同的参数,这些参数在 用户指南
中有详细说明。
请注意,如果在运行时更改处理器的配置,则不得修改 type
、file
或 modes
参数。
添加标准处理器的示例
logger:add_handler(my_standard_h, logger_std_h,
#{config => #{file => "./system_info.log",
filesync_repeat_interval => 1000}}).
要将最初随内核应用程序启动的默认处理器设置为记录到文件而不是 standard_io
,请更改内核默认日志记录器配置。示例
erl -kernel logger '[{handler,default,logger_std_h,
#{config => #{file => "./log.log"}}}]'
有关如何在启动时将标准处理器替换为 disk_log 处理器的示例,请参见 logger_disk_log_h
手册。
另请参阅
概要
函数
将缓冲的数据写入磁盘。