NLog:如何使用函数(纯代码)代替布局字符串?

时间:2019-02-18 13:24:05

标签: c# nlog

通过声明性布局字符串指定消息格式是一种简单的方法,但仅在简单情况下。

当我看到条件或嵌套布局时,我想使用普通代码来格式化消息。

如何通过普通代码格式化邮件?

2 个答案:

答案 0 :(得分:2)

您始终可以注册自己的自定义布局渲染器,该渲染器将生成您喜欢的任何奇妙的图案:

LayoutRenderer.Register("king", (logEvent) => "King of the World");

只需确保在加载NLog-config(或创建任何NLog-Logger对象,包括静态Logger-对象)之前注册布局。

然后,您可以像常规(例如${king})在版式中使用custom-layoutrenderer

另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer

另请参阅:https://nlog-project.org/documentation/v4.5.0/html/T_NLog_LogEventInfo.htm(可用的logevent-属性)

答案 1 :(得分:1)

您还可以创建自己的自定义布局类:

class CustomLayout : Layout
{
    protected string GetFormattedMessage(LogEventInfo logEvent)
    {
         // Legacy-style
         return "King of the world";
    }

    protected override void RenderFormattedMessage(LogEventInfo logEvent, StringBuilder target)
    {
         // New style supports reusable StringBuilder (reduces allocation)
         target.Append(GetFormattedMessage(logEvent));
    }
}