NLog标题(忽略布局)

时间:2017-04-11 00:18:37

标签: c# logging nlog

是否可以在不是日志的日志文件中写一行?

我想写一个“注意”,它会忽略我的NLog.config中的布局,只是在我传递一行或两行时完全写出文本。

这可用于在日志文件上写入标题。

我不确定这对解决方案是否重要,但我为每个类使用单独的ClassLogger(LogManager.GetCurrentClassLogger()),而且我不能选择更改它。

2 个答案:

答案 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