浏览代码

feat(logger): merge metadata to log data

Zaiming Shi 4 年之前
父节点
当前提交
6b0487d69d
共有 2 个文件被更改,包括 50 次插入1 次删除
  1. 1 1
      priv/emqx.schema
  2. 49 0
      src/emqx_logger_textfmt.erl

+ 1 - 1
priv/emqx.schema

@@ -623,7 +623,7 @@ end}.
                     single_line => SingleLine
                    }};
         false ->
-            {logger_formatter,
+            {emqx_logger_textfmt,
                   #{template =>
                       [time," [",level,"] ",
                        {clientid,

+ 49 - 0
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.