From 6b0487d69d5cf7b1a92f9ad9defad0db9e63c5d6 Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Wed, 5 May 2021 16:40:52 +0200 Subject: [PATCH] feat(logger): merge metadata to log data --- priv/emqx.schema | 2 +- src/emqx_logger_textfmt.erl | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/emqx_logger_textfmt.erl diff --git a/priv/emqx.schema b/priv/emqx.schema index b8a15e096..4ee426396 100644 --- a/priv/emqx.schema +++ b/priv/emqx.schema @@ -623,7 +623,7 @@ end}. single_line => SingleLine }}; false -> - {logger_formatter, + {emqx_logger_textfmt, #{template => [time," [",level,"] ", {clientid, diff --git a/src/emqx_logger_textfmt.erl b/src/emqx_logger_textfmt.erl new file mode 100644 index 000000000..3bc9f185a --- /dev/null +++ b/src/emqx_logger_textfmt.erl @@ -0,0 +1,49 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2021 EMQ Technologies Co., Ltd. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%%-------------------------------------------------------------------- + +-module(emqx_logger_textfmt). + +-export([format/2]). +-export([check_config/1]). + +%% metadata fields which we do not wish to merge into log data +-define(WITHOUT_MERGE, + [ report_cb % just a callback + , time % formatted as a part of templated message + , peername % formatted as a part of templated message + , clientid % formatted as a part of templated message + , gl % not interesting + ]). + +check_config(X) -> logger_formatter:check_config(X). + +format(#{msg := Msg0, meta := Meta} = Event, Config) -> + Msg = maybe_merge(Msg0, Meta), + logger_formatter:format(Event#{msg := Msg}, Config). + +maybe_merge({report, Report}, Meta) when is_map(Report) -> + {report, maps:merge(rename(Report), filter(Meta))}; +maybe_merge(Report, _Meta) -> + Report. + +filter(Meta) -> + maps:without(?WITHOUT_MERGE, Meta). + +rename(#{'$kind' := Kind} = Meta0) -> % snabbkaffe + Meta = maps:remove('$kind', Meta0), + Meta#{msg => Kind}; +rename(Meta) -> + Meta.