簡體   English   中英

Elixir Logger 自定義元數據格式

[英]Elixir Logger customize metadata format

在 config.exs 中,我有config :logger, :console, metadata: [:module, :function, :line]

這會將module=Module function=my_func/1 line=41到每條調試消息的開頭。

相反,我想以更易於閱讀的方式格式化消息: Module.my_func/1(41)

是否可以在配置格式說明符中分割出特定的元數據? 在我看來,我應該能夠做類似format: "$metadata[module].$metadata[function]($metadata[line])"事情,但這是不可能的。

是的,這是可能的,但我認為您必須使用:mfa元數據選項

在您的配置中:

config :logger, :console,
  level: :debug,
  metadata: [:mfa, :line],
  format: {MyLogFormatter, :format}

然后在您的自定義MyLogFormatter模塊中,您將實現如下內容:

def format(level, message, timestamp, metadata) do
    src =
      case Keyword.get(metadata, :mfa) do
        {m, f, a} -> "module=#{m} function=#{f}/#{a} line=#{Keyword.get(metadata, :line)}"
        _ -> nil
      end
    
    string = "#{src} #{message}"
    string <> "\n"
  end

如果您想要根據級別自定義行為,您可以添加一兩個子句,但在自定義此內容時要小心,因為如果出現問題,它確實會影響您的應用程序。

如果使用格式化字符串調整日志格式對您有用,那工作量就少了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM