我使用NLog
在单独的文件中登录ASP.NET Core项目:
<?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 async="true">
<target name="JsonFile" xsi:type="File" layout="${message}" fileName="${shortdate}Json.log"/>
<target name="ServerFile" xsi:type="File" layout="${message}" fileName="${shortdate}Server.log"/>
</targets>
<rules>
<logger name="JsonLog" minlevel="Debug" writeTo="JsonFile" />
<logger name="ServerLog" minlevel="Debug" writeTo="ServerFile" />
</rules>
</nlog>
-
public static class Log
{
public static Logger Json = LogManager.GetLogger("JsonLog");
public static Logger Server = LogManager.GetLogger("ServerLog");
}
我的问题:
1。。是否可以将ASP.NET Core的消息直接记录到ServerLog
的特定NLog
文件中?
2。是否可以避免ASP.NET Core想要同步登录到控制台,而只使用ServerLog
的异步NLog
文件来获得更好的性能?大量的控制台日志记录对API的性能产生了巨大的影响。
答案 0 :(得分:0)
您可以使用UseNLog()
将NLog添加为Microsoft Extension Logging提供程序(并通过调用ClearProviders()
来删除默认的ASP.NET控制台提供程序):
https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2
然后,您可以在NLog-config中使用通配符规则(name =“ *”)以进行全部记录:
<nlog>
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<targets async="true">
<target name="JsonFile" xsi:type="File" layout="${message}" fileName="${shortdate}Json.log"/>
<target name="ServerFile" xsi:type="File" layout="${longdate}|${level}|${message}${exception:format=tostring}" fileName="${shortdate}Server.log"/>
</targets>
<rules>
<logger name="JsonLog" minlevel="Debug" writeTo="JsonFile" final="true" />
<logger name="ServerLog" minlevel="Debug" writeTo="ServerFile" final="true" />
<logger name="*" minlevel="Info" writeTo="ServerFile" />
</rules>
</nlog>
答案 1 :(得分:0)
- 是否可以将ASP.NET Core的消息直接记录到NLog的特定ServerLog文件中?
您有以下选择:
ILogger<ServerLog>
,这可能有点怪异,或者ILoggerProvider
(Microsoft.Extensions.Logging命名空间)并使用provider.CreateLogger("ServerLog")
,或LogManager.GetLogger("ServerLog")
,尽管这是非DI方法。它可能适合您的项目。
- 是否可以避免ASP.NET Core想要同步登录到控制台,而仅使用NLog的异步ServerLog文件来获得更好的性能?大量的控制台日志记录对API的性能产生了巨大影响。
您确实需要.ClearProviders()
,请参见以下代码示例:
public static IWebHostBuilder BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders(); // <---------- clear console etc
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog(); // NLog: setup NLog for Dependency injection