查看源码 logger_std_h (内核 v10.2)

Logger 的标准处理器。

这是 Logger 的标准处理器。可以将此处理器的多个实例添加到 Logger 中,每个实例将日志打印到 standard_iostandard_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,则会添加它。
    • 如果在列表中找不到 writeappendexclusive 中的任何一个,则会添加 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.0FileName.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 处理器都使用相同的参数,这些参数在 用户指南中有详细说明。

请注意,如果在运行时更改处理器的配置,则不得修改 typefilemodes 参数。

添加标准处理器的示例

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 手册。

另请参阅

loggerlogger_disk_log_h

概要

函数

将缓冲的数据写入磁盘。

函数

链接到此函数

filesync(Name)

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

将缓冲的数据写入磁盘。