自定义渲染器类不适用于日志

问题描述 投票:0回答:1

我的 nlog.config 文件中有两个目标

<targets>
  <target xsi:type="File"
      name="logfile"
      fileName="../../../Log/log.log">
    <layout xsi:type="Layout">
      <renderer type="truncate" maxMessageLength="500" />
    </layout>
  </target>

  <target xsi:type="Console"
      name="logconsole"      
      layout="${truncate:MaxLength=20}">
  </target>
</targets>

由于自定义渲染器类,它们都不起作用,但我根据手册和chatgpt编写的所有代码。

这是我的课

[LayoutRenderer("truncate")]
public class TruncateLayoutRenderer : LayoutRenderer
{
    [RequiredParameter]
    public int MaxLength { get; set; }

    protected override void Append(StringBuilder builder, LogEventInfo logEvent)
    {
        string formattedLogEntry = $"test {logEvent.TimeStamp:yyyy-MM-dd HH:mm:ss} {logEvent.Level:uppercase=true} - {logEvent.FormattedMessage}";

        if (formattedLogEntry.Length > MaxLength)
        {
            formattedLogEntry = formattedLogEntry.Substring(0, MaxLength);
        }

        builder.Append(formattedLogEntry);
    }
}

配置文件和类在一个项目中

当我启动项目时,我看到布局设置为默认。但如果我在配置文件中使用硬编码的布局,它就可以工作。我的课出了什么问题吗?

我看了手册并询问了gpt,似乎一切都正确

c# nlog
1个回答
0
投票

如果您阅读了 wiki 页面 如何编写自定义布局渲染器,那么它会说 不要忘记注册您的自定义组件

但是请注意,NLog 中已经存在内置的截断方法。所以你可以这样做

${message:truncate=500}
(不需要你自己的自定义布局渲染器。

另请参阅:https://nlog-project.org/config/?tab=layout-renderers

© www.soinside.com 2019 - 2024. All rights reserved.