關於NLog的基本用法,
網路上有很多的教學文,所以在此就不多作介紹。
如果你是第一次使用NLog的朋友,
可以參考Kevin大的文章: 傳送門
內容寫得非常詳盡,包準看著做就會。
本篇要介紹的主要是NLog.Config檔裡面rule的多目標輸出
首先我們先看一下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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Error" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/>
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<target name="file" xsi:type="File"
fileName="${basedir}/App_Data/Logs/${shortdate}/${logger}.txt"
layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
<target name="FatalFile" xsi:type="File"
fileName="${basedir}/App_Data/Logs/${shortdate}/FatalFile.txt"
layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
<target name="eventlog" xsi:type="EventLog"
source="Lab_Of_NLog" log="Application"
layout="${date}: ${message} ${stacktrace}" />
</targets>
<rules>
<logger name="*" levels="Trace, Debug, Info, Warn" writeTo="file" />
<logger name="*" level="Fatal" writeTo="FatalFile" />
<logger name="*" level="Fatal" writeTo="eventlog" />
</rules>
</nlog>
這邊的基本介紹一開始的Kevin大的文章內已經有說明過了,我就不再贅述
正常來講一份Log應該只需要寫一次,但是總是有例外
當你的老闆要求你把一份Log寫到兩個不同目標的資料夾的時候
你可以先問問他是不是瘋了(也只能OS一下啦)
但因為他是老闆,所以我們也只能照辦
所以要怎麼設定呢?
NLog可支援單筆rule寫至多個target裡面
所以我們只要修改NLog.Config內容即可
假設我們要把某個rule分別寫到兩個不同的target(Dir_A、Dir_B)
target
<target name="Dir_A" xsi:type="File"
fileName="${basedir}/App_Data/Logs/${shortdate}/DirA/${logger}.txt"
layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
<target name="Dir_B" xsi:type="File"
fileName="${basedir}/App_Data/Logs/${shortdate}/DirB/${logger}.txt"
layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
rule
<logger name="*" levels="Trace, Debug, Info, Warn" writeTo="Dir_A,Dir_B" />
測試結果如下
後記:
雖然這是很白癡的作法
但老闆想要你也只能認了......
下次再來分享NLog rule的進階設定