我的 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,似乎一切都正确
如果您阅读了 wiki 页面 如何编写自定义布局渲染器,那么它会说 不要忘记注册您的自定义组件
但是请注意,NLog 中已经存在内置的截断方法。所以你可以这样做
${message:truncate=500}
(不需要你自己的自定义布局渲染器。