查看源代码 logger_disk_log_h (内核 v10.2)
一个基于 disk_log 的 Logger 处理程序
这是一个 Logger 的处理程序,它通过使用 disk_log
提供循环(环绕式)日志。可以将此处理程序的多个实例添加到 Logger,并且每个实例都会打印到其自己的磁盘日志文件中,该文件使用处理程序配置中指定的名称和设置创建。
默认的标准处理程序 logger_std_h
可以在 Kernel 应用程序启动时被 disk_log 处理程序替换。请参阅下面的示例。
该处理程序具有过载保护机制,可以在高负载日志事件期间保持处理程序进程和 Kernel 应用程序的运行。有关过载保护如何工作以及如何配置它的说明,请参见 用户指南
。
要添加 disk_log 处理程序的新实例,请使用 logger:add_handler/3
。处理程序配置参数是一个映射,它可以包含在 用户指南
中记录的通用配置参数,以及处理程序特定的参数。特定数据存储在键为 config
的子映射中,并且可以包含以下参数
file
- 这是磁盘日志文件的完整名称。该选项对应于dlog_option()
数据类型中的name
属性。该值在添加处理程序时设置,并且在运行时无法更改。
默认为与当前目录中处理程序标识相同的名称。
type
- 这是磁盘日志类型,wrap
或halt
。该选项对应于dlog_option()
数据类型中的type
属性。该值在添加处理程序时设置,并且在运行时无法更改。
默认为
wrap
。max_no_files
- 这是 disk_log 用于其循环日志记录的最大文件数。该选项对应于dlog_option()
数据类型中size
属性中的MaxNoFiles
元素。该值在添加处理程序时设置,并且在运行时无法更改。
默认为
10
。此设置对 halt 日志无效。
max_no_bytes
- 这是在 disk_log 继续按顺序处理下一个文件之前,或在完整 halt 日志的情况下生成错误之前,写入日志文件的最大字节数。该选项对应于dlog_option()
数据类型中size
属性中的MaxNoBytes
元素。该值在添加处理程序时设置,并且在运行时无法更改。
对于 wrap 日志,默认为
1048576
字节,对于 halt 日志,默认为infinity
。filesync_repeat_interval
- 此值(以毫秒为单位)指定处理程序将 disk_log 同步操作写入缓冲数据到磁盘的频率。处理程序会重复尝试此操作,但仅在实际记录了某些内容时才执行新的同步。默认为
5000
毫秒。如果将
no_repeat
设置为值,则禁用重复的同步操作。用户还可以调用filesync/1
函数来执行 disk_log 同步。
还存在其他配置参数,用于自定义过载保护行为。标准处理程序和 disk_log 处理程序都使用相同的参数,并在 用户指南
中进行了说明。
请注意,在运行时更改处理程序的配置时,不得修改 disk_log 选项(file
、type
、max_no_files
、max_no_bytes
)。
添加 disk_log 处理程序的示例
logger:add_handler(my_disk_log_h, logger_disk_log_h,
#{config => #{file => "./my_disk_log",
type => wrap,
max_no_files => 4,
max_no_bytes => 10000,
filesync_repeat_interval => 1000}}).
要在启动 Erlang 节点时使用 disk_log 处理程序而不是默认的标准处理程序,请更改 Kernel 默认的 logger 以使用 logger_disk_log_h
。示例
erl -kernel logger '[{handler,default,logger_disk_log_h,
#{config => #{file => "./system_disk_log"}}}]'
另请参阅
概要
函数
将缓冲数据写入磁盘。