是否可以在不是日志的日志文件中写一行?
我想写一个“注意”,它会忽略我的NLog.config中的布局,只是在我传递一行或两行时完全写出文本。
这可用于在日志文件上写入标题。
我不确定这对解决方案是否重要,但我为每个类使用单独的ClassLogger(LogManager.GetCurrentClassLogger()
),而且我不能选择更改它。
答案 0 :(得分:1)
我能够通过一些创意规则来实现这一目标。
首先在我的代码中,我专门为这个标题创建了一个记录器:
var loggerNoLayout = LogManager.GetLogger("NoLayout");
loggerNoLayout.Info("<Header Line 1>");
loggerNoLayout.Info("<Header Line 2>");
loggerNoLayout.Info("<Header Line 3>");
然后我修改了我的NLog.config:
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="NoLayout"
xsi:type="File"
fileName="${specialfolder:folder=Desktop}\LogFile.log"
layout="${message}" />
<target name="FileTrace"
xsi:type="File"
fileName="${specialfolder:folder=Desktop}\LogFile.log"
layout="${level:padding=-5:fixedLength=true} | ${logger:padding=-62:fixedLength=true:alignmentOnTruncation=right}| ${date:format=HH\:mm\:ss} | ${message:padding=-100}"
deleteOldFileOnStartup="true" />
</targets>
<rules>
<logger writeTo="NoLayout"
levels="Info"
name="NoLayout"
final="true" />
<logger writeTo="FileTrace"
minlevel="Trace"
name="*" />
</rules>
</nlog>
此处的关键是,NoLayout
目标的布局仅写入消息,而写入NoLayout
的规则仅在记录器名为NoLayout
时才有效。最后一步是添加final="true"
,以便我的普通(FileTrace
)记录器不会获取标头日志。
答案 1 :(得分:0)
不确定。将字符串写入以换行符开头的日志。然后写下你的内容。
var longMultilineMessage = "pretend this variable contains\n a long multiline message";
logger.Info($"\n{longMultilineMessage}");
将在日志中显示为:
2017-01-01 INFO
pretend this variable contains
a long multiline message