我正在嘗試向我現有的 NLog 實作添加一個額外的日志檔案。我已經有一個 Nlog 檔案記錄器,但我想為某些日志添加另一個。
我無法將這些日志分開,因為現有呼叫使用LogManager.GetCurrentClassLogger()它似乎只是附加到我想分開的日志上。
新日志檔案應僅由 Global.asax 檔案中的日志填充,但將該規則集添加到 Web.config 中不起作用。是否有一種特殊的方法可以為 Global.asax 檔案定義規則?
Global.asax 檔案
namespace TestOne.Browser
{
using System.Net;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using DataAnnotationsExtensions.ClientValidation;
using WebMatrix.WebData;
public class MvcApplication : HttpApplication
{
protected void Application_EndRequest()
{
...
var logger = LogManager.GetLogger("diagnosticsfile");
logger.Info("{0}, {1}, {2}, {3}", user, pageName, totalClientTimings, duration);
...
}
}
}
Web.config 檔案
<nlog>
<variable name="root" value="C:/TestOne/Logs/Browser" />
<targets>
<target name="file" type="File" header="Starting logging..." footer="Stopping logging..." layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff} ${uppercase:${level}} ${callsite} ${aspnet-user-identity}${newline}${message} ${exception:format=ToString:maxInnerExceptionLevel=5}" fileName="${root}/Browser.log" archiveFileName="${root}/Archive/Browser.{##}.log" createDirs="true" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="31" concurrentWrites="false" keepFileOpen="false" />
<target name="diagnosticsfile" type="File" header="Time, LogType, User, PageName, TotalClientTimings, Duration (ms)" layout="${longdate},${level:uppercase=true},${message}" fileName="${root}/DiagnosticsLog.log" archiveFileName="${root}/Archive/Diagnostics.{##}.log" createDirs="true" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="31" concurrentWrites="false" keepFileOpen="false" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="file" />
<logger name="TestOne.Browser.MvcApplication" minlevel="Info" writeTo="diagnosticsfile" />
</rules>
</nlog>
使用此當前配置,我的診斷檔案(新日志檔案)不會寫入任何內容。如果我更換TestOne.Browser.MvcApplication與*在NLOG規則,該檔案被寫入,但隨后在其他班級使用現有日志LogManager.GetCurrentClassLogger()有時會附加到診斷日志(他們不應該這樣做)。有沒有辦法配置它,這樣就不會發生?
uj5u.com熱心網友回復:
日志規則決定了 logger-output 應該寫在哪里。您的日志記錄規則說只有具有名稱的記錄器TestOne.Browser.MvcApplication才能寫入diagnosticsfile-target:
<rules>
<logger name="*" minlevel="Trace" writeTo="file" />
<logger name="TestOne.Browser.MvcApplication" minlevel="Info" writeTo="diagnosticsfile" />
</rules>
但是在您使用的代碼中LogManager.GetLogger("diagnosticsfile"):
要指定 logger-namediagnosticsfile應寫入診斷檔案目標,您可以這樣做:
<rules>
<logger name="diagnosticsfile" minlevel="Info" writeTo="diagnosticsfile" final="true" />
<logger name="*" minlevel="Trace" writeTo="file" />
</rules>
請注意,final="true"以確保記錄器輸出不會流向寫入file-target的 catch-all-rule 。
另見:https : //github.com/NLog/NLog/wiki/Tutorial
另見:https : //github.com/nlog/NLog/wiki/Configuration-file#rules
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339678.html
標籤:C# asp.net-mvc 日志
上一篇:下拉串列中的重復值-MVC
