Nlog - Web.config 规则 - 仅用于 Global.asax 文件的日志文件?
Nlog - Web.config rules - log file only for Global.asax file?
我正在尝试向我现有的 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>
使用当前配置,没有任何内容写入我的诊断文件(新日志文件)。
如果我在 Nlog 规则中将 TestOne.Browser.MvcApplication
替换为 *
,则会写入文件,但其他 类 中使用 LogManager.GetCurrentClassLogger()
的现有日志有时会附加到诊断日志(他们不应该这样做)。有没有一种方法可以配置它,以免发生这种情况?
日志记录规则决定记录器输出应该写在哪里。您的日志记录规则说只有名称为 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-name diagnosticsfile
应该写入 diagnosticsfile-target,您可以这样做:
<rules>
<logger name="diagnosticsfile" minlevel="Info" writeTo="diagnosticsfile" final="true" />
<logger name="*" minlevel="Trace" writeTo="file" />
</rules>
注意 final="true"
以确保记录器输出不会流向写入 file
-target.
的包罗万象的规则
另请参阅:https://github.com/NLog/NLog/wiki/Tutorial
另请参阅:https://github.com/nlog/NLog/wiki/Configuration-file#rules
我正在尝试向我现有的 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>
使用当前配置,没有任何内容写入我的诊断文件(新日志文件)。
如果我在 Nlog 规则中将 TestOne.Browser.MvcApplication
替换为 *
,则会写入文件,但其他 类 中使用 LogManager.GetCurrentClassLogger()
的现有日志有时会附加到诊断日志(他们不应该这样做)。有没有一种方法可以配置它,以免发生这种情况?
日志记录规则决定记录器输出应该写在哪里。您的日志记录规则说只有名称为 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-name diagnosticsfile
应该写入 diagnosticsfile-target,您可以这样做:
<rules>
<logger name="diagnosticsfile" minlevel="Info" writeTo="diagnosticsfile" final="true" />
<logger name="*" minlevel="Trace" writeTo="file" />
</rules>
注意 final="true"
以确保记录器输出不会流向写入 file
-target.
另请参阅:https://github.com/NLog/NLog/wiki/Tutorial
另请参阅:https://github.com/nlog/NLog/wiki/Configuration-file#rules