From a8e3a9610bfc3d5a87c4f1e11f6f9e4589e67bd2 Mon Sep 17 00:00:00 2001 From: Serge Aleynikov Date: Sun, 17 May 2015 07:26:44 -0400 Subject: [PATCH] Add abbreviated severity 'sev' available to formatter --- README.md | 4 ++- src/lager_default_formatter.erl | 5 +++- src/lager_util.erl | 49 ++++++++++++++++++++------------- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 5d234c8..c0deccb 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,9 @@ for the backend: Included is lager_default_formatter. This provides a generic, default formatting for log messages using a "semi-iolist" as configuration. Any iolist allowed elements in the configuration are printed verbatim. Atoms in the configuration are treated as metadata properties and extracted from the log message. -The metadata properties date,time, message, and severity will always exist. +The metadata properties date,time, message, severity, and sev will always exist. The sev +property represents an "abbreviated" severity which `lager_default_formatter` interprets as a +capitalized single letter encoding of the severity level (e.g. `'debug'` -> `$D`). The properties pid, file, line, module, function, and node will always exist if the parser transform is used. ``` diff --git a/src/lager_default_formatter.erl b/src/lager_default_formatter.erl index 312f6a0..5ef85f2 100644 --- a/src/lager_default_formatter.erl +++ b/src/lager_default_formatter.erl @@ -40,7 +40,7 @@ %% or refer to other properties, if desired. You can also use a {atom, semi-iolist(), semi-iolist()} formatter, which %% acts like a ternary operator's true/false branches. %% -%% The metadata properties date,time, message, and severity will always exist. +%% The metadata properties date,time, message, severity, and sev will always exist. %% The properties pid, file, line, module, and function will always exist if the parser transform is used. %% %% Example: @@ -86,6 +86,9 @@ output(time,Msg) -> T; output(severity,Msg) -> atom_to_list(lager_msg:severity(Msg)); +output(sev,Msg) -> + %% Write brief acronym for the severity level (e.g. debug -> $D) + [lager_util:level_to_chr(lager_msg:severity(Msg))]; output(Prop,Msg) when is_atom(Prop) -> Metadata = lager_msg:metadata(Msg), make_printable(get_metadata(Prop,Metadata,<<"Undefined">>)); diff --git a/src/lager_util.erl b/src/lager_util.erl index 67894ff..9d02bd5 100644 --- a/src/lager_util.erl +++ b/src/lager_util.erl @@ -18,7 +18,8 @@ -include_lib("kernel/include/file.hrl"). --export([levels/0, level_to_num/1, num_to_level/1, config_to_mask/1, config_to_levels/1, mask_to_levels/1, +-export([levels/0, level_to_num/1, level_to_chr/1, + num_to_level/1, config_to_mask/1, config_to_levels/1, mask_to_levels/1, open_logfile/2, ensure_logfile/4, rotate_logfile/2, format_time/0, format_time/1, localtime_ms/0, localtime_ms/1, maybe_utc/1, parse_rotation_date_spec/1, calculate_next_rotation/1, validate_trace/1, check_traces/4, is_loggable/3, @@ -33,25 +34,35 @@ levels() -> [debug, info, notice, warning, error, critical, alert, emergency, none]. -level_to_num(debug) -> ?DEBUG; -level_to_num(info) -> ?INFO; -level_to_num(notice) -> ?NOTICE; -level_to_num(warning) -> ?WARNING; -level_to_num(error) -> ?ERROR; -level_to_num(critical) -> ?CRITICAL; -level_to_num(alert) -> ?ALERT; -level_to_num(emergency) -> ?EMERGENCY; -level_to_num(none) -> ?LOG_NONE. - -num_to_level(?DEBUG) -> debug; -num_to_level(?INFO) -> info; -num_to_level(?NOTICE) -> notice; -num_to_level(?WARNING) -> warning; -num_to_level(?ERROR) -> error; -num_to_level(?CRITICAL) -> critical; -num_to_level(?ALERT) -> alert; +level_to_num(debug) -> ?DEBUG; +level_to_num(info) -> ?INFO; +level_to_num(notice) -> ?NOTICE; +level_to_num(warning) -> ?WARNING; +level_to_num(error) -> ?ERROR; +level_to_num(critical) -> ?CRITICAL; +level_to_num(alert) -> ?ALERT; +level_to_num(emergency) -> ?EMERGENCY; +level_to_num(none) -> ?LOG_NONE. + +level_to_chr(debug) -> $D; +level_to_chr(info) -> $I; +level_to_chr(notice) -> $N; +level_to_chr(warning) -> $W; +level_to_chr(error) -> $E; +level_to_chr(critical) -> $C; +level_to_chr(alert) -> $A; +level_to_chr(emergency) -> $M; +level_to_chr(none) -> $ . + +num_to_level(?DEBUG) -> debug; +num_to_level(?INFO) -> info; +num_to_level(?NOTICE) -> notice; +num_to_level(?WARNING) -> warning; +num_to_level(?ERROR) -> error; +num_to_level(?CRITICAL) -> critical; +num_to_level(?ALERT) -> alert; num_to_level(?EMERGENCY) -> emergency; -num_to_level(?LOG_NONE) -> none. +num_to_level(?LOG_NONE) -> none. -spec config_to_mask(atom()|string()) -> {'mask', integer()}. config_to_mask(Conf) ->