我想在日志文件中写一个独立的字符串(如水平线或分隔符)。
如果我使用
string delimiter = "------------------------------------------------";
_logger.Info(delimiter);
然后在日志文件中我得到:
2013-01-08 15:58:54.4008 INFO ------------------------------------------------
我不希望在行的开头有额外的信息。
有没有办法用NLog编写这样的分隔符?我检查了NLog维基,但没有找到任何东西。
答案 0 :(得分:1)
请在此处查看我对类似问题的回答:
Nlog - Generating Header Section for a log file
总而言之,我建议定义另一个记录目标。如果要登录到文件,请定义第二个文件目标,指向同一文件,但布局不同。定义布局,使其具有所需的格式。您可以将布局定义为硬编码到您想要的标题值(在您的情况下为“---------------”),或者您可以定义布局以仅记录消息和然后你可以将布局传递给它。
这是可行的最短的事情。请注意,我从上面链接的答案剪切并粘贴,并根据您的情况稍作修改。我没有测试它。
定义布局:
<variable name="HeaderLayout" value="${message}"/>
<variable name="FileLayout" value="${longdate} | ${logger} | ${level} | ${message}" />
使用布局定义目标:
<target name="fileHeader" xsi:type="File" fileName="xxx.log" layout="${HeaderLayout}" />
<target name="file" xsi:type="File" fileName="xxx.log" layout="${InfoLayout}" />
定义规则/记录器:
<rules>
<logger name="headerlogger" minlevel="Trace" writeTo="fileHeader" final="true" />
<logger name="*" minlevel="Trace" writeTo="file" />
</rules>
使用记录器:
public class MyClass
{
private static Logger logger = LogManager.GetCurrentClassLogger();
private static Logger headerLogger = LogManager.GetLogger("headerlogger");
public void DoSomething()
{
headerLogger.Info("---------------------");
logger.Info("Inside DoSomething");
headerLogger.Info("---------------------");
}
}
或者,您可以定义布局,使其具有标题定义:
<variable name="HeaderLayout" value="-----------------------------"/>
<variable name="FileLayout" value="${longdate} | ${logger} | ${level} | ${message}" />
然后你会像这样使用它:
Logger headerLogger = LogManager.GetLogger("headerlogger"); //Assuming same rules/loggers definition as above.
headerLogger.Info("It doesn't matter what you put here because the layout has the header message hardcoded");
您可以编写辅助函数,这样就不必明确处理标题记录器:
public void WriteHeader()
{
LogManager.GetLogger("headerlogger").Info("This string does not matter");
}
我认为这可以让你对如何完成你想要做的事情有一个很好的了解。
希望这有帮助!
祝你好运!