查看源代码 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 - 这是磁盘日志类型,wraphalt。该选项对应于 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 选项(filetypemax_no_filesmax_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"}}}]'

另请参阅

logger, logger_std_h, disk_log

概要

函数

将缓冲数据写入磁盘。

函数

此函数的链接

filesync(Name)

查看源代码 (自 OTP 21.0 起)
-spec filesync(Name) -> ok | {error, Reason}
                  when Name :: atom(), Reason :: handler_busy | {badarg, term()}.

将缓冲数据写入磁盘。