From b0cd83254dcf8576a9133ddc0446b2fc9d13691f Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 9 Jun 2022 17:04:40 +0800 Subject: [PATCH] fix: schema and desc for time_offset of the log handlers --- apps/emqx_conf/i18n/emqx_conf_schema.conf | 100 ++++++++++++---------- apps/emqx_conf/src/emqx_conf_schema.erl | 44 +++++----- 2 files changed, 78 insertions(+), 66 deletions(-) diff --git a/apps/emqx_conf/i18n/emqx_conf_schema.conf b/apps/emqx_conf/i18n/emqx_conf_schema.conf index 88b155e50..b6d57b669 100644 --- a/apps/emqx_conf/i18n/emqx_conf_schema.conf +++ b/apps/emqx_conf/i18n/emqx_conf_schema.conf @@ -940,8 +940,8 @@ until the RPC connection is considered lost.""" log_file_handlers { desc { - en: """Key-value list of file-based log handlers.""" - zh: """需要持久化到文件的日志处理进程列表。默认只有 default 一个处理进程。""" + en: """file-based log handlers.""" + zh: """输出到文件的日志处理进程列表""" } label { en: "File Handler" @@ -962,21 +962,39 @@ until the RPC connection is considered lost.""" common_handler_level { desc { - en: """Global log level. This includes the primary log level and all log handlers.""" - zh: """设置日志级别。 默认为warning。""" + en: """ +The log level for the current log handler. +Defaults to warning. +""" + zh: """ +当前日志处理进程的日志级别。 +默认为 warning 级别。 +""" } label { - en: "Global Log Level" + en: "Log Level" zh: "日志级别" } } common_handler_time_offset { desc { - en: """The time offset to be used when formatting the timestamp.""" - zh: """日志格式中的时间戳,使用的时间偏移量。默认使用系统时区system,当为utc为无时间偏移量 -为具体的N(1-24)数字时,则代表时间偏移量+N。 - """ + en: """ +The time offset to be used when formatting the timestamp. +Can be one of: + - system: the time offset used by the local system + - utc: the UTC time offset + - +-[hh]:[mm]: user specified time offset, such as "-02:00" or "+00:00" +Defaults to: system. +""" + zh: """ +日志中的时间戳使用的时间偏移量。 +可选值为: + - system: 本地系统使用的时区偏移量 + - utc: 0 时区的偏移量 + - +-[hh]:[mm]: 自定义偏移量,比如 "-02:00" 或者 "+00:00" +默认值为本地系统的时区偏移量:system。 +""" } label { en: "Time Offset" @@ -997,12 +1015,12 @@ until the RPC connection is considered lost.""" common_handler_formatter { desc { - en: """Choose log format. text for free text, and json for structured logging.""" - zh: """选择日志格式。 text 用于纯文本,json 用于结构化日志记录。""" + en: """Choose log formatter. text for free text, and json for structured logging.""" + zh: """选择日志格式类型。 text 用于纯文本,json 用于结构化日志记录。""" } label { - en: "Log Format" - zh: "日志格式" + en: "Log Formatter" + zh: "日志格式类型" } } @@ -1037,8 +1055,8 @@ asynchronous operation is resumed. 默认为100条信息,当等待的日志事件大于100条时,就开始同步处理日志。""" } label { - en: "Sync Mode Max Log Events" - zh: "异步模式最大事件数" + en: "Queue Length before Entering Sync Mode" + zh: "进入异步模式的队列长度" } } @@ -1047,7 +1065,7 @@ asynchronous operation is resumed. en: """When the number of buffered log events is larger than this value, the new log events are dropped. When drop mode is activated or deactivated, a message is printed in the logs.""" zh: """当缓冲的日志事件数大于此值时,新的日志事件将被丢弃。起到过载保护的功能。 -为了使过载保护算法正常工作必须要: sync_mode_qlen =< drop_mode_qlen =< flush_qlen <\code> 且 drop_mode_qlen > 1 +为了使过载保护算法正常工作必须要: sync_mode_qlen =< drop_mode_qlen =< flush_qlen 且 drop_mode_qlen > 1 要禁用某些模式,请执行以下操作。 - 如果sync_mode_qlen被设置为0,所有的日志事件都被同步处理。也就是说,异步日志被禁用。 - 如果sync_mode_qlen被设置为与drop_mode_qlen相同的值,同步模式被禁用。也就是说,处理程序总是以异步模式运行,除非调用drop或flushing。 @@ -1055,31 +1073,36 @@ When drop mode is activated or deactivated, a message is printed in the logs.""" """ } label { - en: "Drop Mode Max Log Events" - zh: "缓存最大日志事件数" + en: "Queue Length before Entering Drop Mode" + zh: "进入丢弃模式的队列长度" } } common_handler_flush_qlen { desc { - en: """If the number of buffered log events grows larger than this threshold, a flush (delete) operation takes place. To flush events, the handler discards the buffered log messages without logging.""" - zh: """如果缓冲日志事件的数量增长大于此阈值,则会发生刷新(删除)操作。 日志处理进程会丢弃缓冲的日志消息。 + en: """If the number of buffered log events grows larger than this threshold, a flush (delete) operation takes place. +To flush events, the handler discards the buffered log messages without logging.""" + zh: """如果缓冲日志事件的数量增长大于此阈值,则会发生冲刷(删除)操作。 日志处理进程会丢弃缓冲的日志消息。 来缓解自身不会由于内存瀑涨而影响其它业务进程。日志内容会提醒有多少事件被删除。""" } label { en: "Flush Threshold" - zh: "刷新阈值" + zh: "冲刷阈值" } } common_handler_supervisor_reports { desc { - en: """Type of supervisor reports that are logged. - - `error`: only log errors in the Erlang processes. - - `progress`: log process startup.""" - zh: """ supervisor 报告的类型。默认为 error 类型。 - - `error`:仅记录 Erlang 进程中的错误。 - - `progress`:除了 error 信息外,还需要记录进程启动的详细信息。""" + en: """ +Type of supervisor reports that are logged. Defaults to error + - error: only log errors in the Erlang processes. + - progress: log process startup. +""" + zh: """ +Supervisor 报告的类型。默认为 error 类型。 + - error:仅记录 Erlang 进程中的错误。 + - progress:除了 error 信息外,还需要记录进程启动的详细信息。 +""" } label { en: "Report Type" @@ -1122,17 +1145,6 @@ When drop mode is activated or deactivated, a message is printed in the logs.""" } } - log_error_logger { - desc { - en: """Keep error_logger silent.""" - zh: """让 error_logger 日志处理进程关闭,防止一条异常信息被记录多次。""" - } - label { - en: "error_logger" - zh: "error_logger" - } - } - log_rotation_enable { desc { en: """Enable log rotation feature.""" @@ -1170,12 +1182,12 @@ When drop mode is activated or deactivated, a message is printed in the logs.""" log_overload_kill_mem_size { desc { - en: """Maximum memory size that the handler process is allowed to use.""" - zh: """处理进程允许使用的最大内存。""" + en: """Maximum memory size that the log handler process is allowed to use.""" + zh: """日志处理进程允许使用的最大内存。""" } label { - en: "Handler Allowed Max Memory Size" - zh: "处理进程允许使用的最大内存" + en: "Log Handler Max Memory Size" + zh: "日志处理进程允许使用的最大内存" } } @@ -1225,8 +1237,8 @@ When drop mode is activated or deactivated, a message is printed in the logs.""" log_burst_limit_window_time { desc { - en: """See `max_count`.""" - zh: """参考 `max_count`。""" + en: """See max_count.""" + zh: """参考 max_count。""" } label { en: "Window Time" diff --git a/apps/emqx_conf/src/emqx_conf_schema.erl b/apps/emqx_conf/src/emqx_conf_schema.erl index 820129dcd..79d0a5d91 100644 --- a/apps/emqx_conf/src/emqx_conf_schema.erl +++ b/apps/emqx_conf/src/emqx_conf_schema.erl @@ -790,16 +790,6 @@ fields("log") -> sc( map(name, ?R_REF("log_file_handler")), #{desc => ?DESC("log_file_handlers")} - )}, - {"error_logger", - sc( - atom(), - #{ - mapping => "kernel.error_logger", - default => silent, - 'readOnly' => true, - desc => ?DESC("log_error_logger") - } )} ]; fields("console_handler") -> @@ -811,7 +801,7 @@ fields("log_file_handler") -> file(), #{ desc => ?DESC("log_file_handler_file"), - validator => fun file_location/1 + validator => fun validate_file_location/1 } )}, {"rotation", @@ -955,7 +945,8 @@ translation("ekka") -> translation("kernel") -> [ {"logger_level", fun tr_logger_level/1}, - {"logger", fun tr_logger/1} + {"logger", fun tr_logger/1}, + {"error_logger", fun(_) -> silent end} ]; translation("emqx") -> [ @@ -1088,7 +1079,8 @@ log_handler_common_confs(Enable) -> string(), #{ default => "system", - desc => ?DESC("common_handler_time_offset") + desc => ?DESC("common_handler_time_offset"), + validator => fun validate_time_offset/1 } )}, {"chars_limit", @@ -1326,14 +1318,22 @@ emqx_schema_high_prio_roots() -> )}, lists:keyreplace("authorization", 1, Roots, Authz). --define(VALID_FILE, "^[/\_a-zA-Z0-9\.\-]*$"). -file_location(File) -> - Error = {error, "Invalid file name: " ++ ?VALID_FILE}, - try - case re:run(File, ?VALID_FILE) of - nomatch -> Error; - _ -> ok - end +validate_file_location(File) -> + ValidFile = "^[/\\_a-zA-Z0-9\\.\\-]*$", + Error = "Invalid file name: " ++ ValidFile, + validator_string_re(File, ValidFile, Error). + +validate_time_offset(Offset) -> + ValidTimeOffset = "^([\\-\\+][0-1][0-9]:[0-6][0-9]|system|utc)$", + Error = + "Invalid time offset, should be of format: +[hh]:[mm], " + "i.e. +08:00 or -02:00", + validator_string_re(Offset, ValidTimeOffset, Error). + +validator_string_re(Val, RE, Error) -> + try re:run(Val, RE) of + nomatch -> {error, Error}; + _ -> ok catch - _:_ -> Error + _:_ -> {error, Error} end.