C# NLog:如何使用函数(普通代码)而不是布局字符串?

C# NLog:如何使用函数(普通代码)而不是布局字符串?,c#,nlog,C#,Nlog,通过声明性布局字符串指定消息格式是一种简单的方法,但只适用于简单的情况 当我看到条件或嵌套布局时,我希望使用普通代码格式化消息 如何通过普通代码格式化消息?您可以随时注册自己的自定义布局渲染器,以生成您喜欢的任何精彩图案: LayoutRenderer.Register("king", (logEvent) => "King of the World"); 只需确保在加载NLog配置(或创建任何NLog记录器对象,包括静态记录器对象)之前注册布局 然后,您可以在布局中使用自定义layou

通过声明性布局字符串指定消息格式是一种简单的方法,但只适用于简单的情况

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


如何通过普通代码格式化消息?

您可以随时注册自己的自定义布局渲染器,以生成您喜欢的任何精彩图案:

LayoutRenderer.Register("king", (logEvent) => "King of the World");
只需确保在加载NLog配置(或创建任何NLog记录器对象,包括静态记录器对象)之前注册布局

然后,您可以在布局中使用自定义layoutrenderer,就像普通布局一样(例如,
${king}

另见:


另请参见:(可用
logevent
-properties)

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

LayoutRenderer.Register("king", (logEvent) => "King of the World");
只需确保在加载NLog配置(或创建任何NLog记录器对象,包括静态记录器对象)之前注册布局

然后,您可以在布局中使用自定义layoutrenderer,就像普通布局一样(例如,
${king}

另见:


另请参见:(可用
logevent
-properties)

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

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));
    }
}

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

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));
    }
}

对于纯代码,您的意思是用C#设置布局值吗?当然可以。确定添加了C#标记,因为stackoverflow适用于更多语言;)对于纯代码,您的意思是用C#设置布局值吗?当然可以。确定添加了C#标记,因为stackoverflow适用于更多语言;)对不起,冒犯了你。请为NLog项目创建PullRequest,说明如何实现正确的消息格式。为什么抱歉?!谢谢你的回答。我认为它有效。但它看起来像拐杖。对不起,冒犯了你。请为NLog项目创建PullRequest,说明如何实现正确的消息格式。为什么抱歉?!谢谢你的回答。我认为它有效。但是它看起来像一根拐杖。哇,我才意识到布局不是字符串(哇,我才意识到布局不是字符串)