原来问题与NLog或ASP.NET Logging系统无关。日志记录已正确配置,但由于配置错误,构建服务器将Debug构建发布到生产环境中。
我正在尝试在ASP.NET Core 2.0(SDK 2.1.401)项目中设置第三方日志记录器。到目前为止,我已经尝试了Serilog和NLog,但两者都遇到了相同的问题。总结一下问题:
以下是Program.cs中的相关部分。
注意那些以
我正在尝试在ASP.NET Core 2.0(SDK 2.1.401)项目中设置第三方日志记录器。到目前为止,我已经尝试了Serilog和NLog,但两者都遇到了相同的问题。总结一下问题:
- 当我像dotnet run这样运行应用程序时(即在Development环境中),它按预期工作
- 但是当我在二进制文件dotnet MyApplication.dll中运行它时(即在Production环境中),它不起作用。
- 在appsettings.Development.json文件中,我没有为Development环境定义Logging部分中的任何内容。
以下是Program.cs中的相关部分。
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((env, logging) =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog()
.Build();
注意:我已清除所有提供程序,并添加了NLog
,同时定义了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"
autoReload="true"
internalLogLevel="error"
internalLogFile="./internal-nlog.txt">
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<targets>
<target name="Console"
xsi:type="Console"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="Console" />
</rules>
</nlog>
当以开发
模式运行时,我看到的日志与我预期的完全一致。
$ dotnet run
Using launch settings from .. /Properties/launchSettings.json...
2018-09-16 19:04:39.7585||DEBUG|My.WebApp.Program|init main |url: |action:
Hosting environment: Development
Content root path: /Users/ ...
Now listening on: http://localhost:61638
Application started. Press Ctrl+C to shut down.
2018-09-16 19:04:46.5405|1|INFO|Microsoft.AspNetCore.Hosting.Internal.WebHost|Request starting HTTP/1.1 GET http://localhost:61638/api/_doc |url: http://localhost/api/_doc|action:
2018-09-16 19:04:46.7381|1|INFO|Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker|Executing action method My.WebApp.RestApi.Doc (My.WebApp) with arguments ((null)) - ModelState is Valid |url: http://localhost/api/_doc|action: Doc
然而,当我在生产
环境中运行应用程序时,控制台输出看起来好像我没有安装NLog
并且我还没有清除默认提供者。
dotnet .\My.WebApp.dll
Hosting environment: Production
Content root path: C:\inetpub\wwwroot\myapp\wwwroot
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method My.WebApp.Controllers.HomeController.Index (My.WebApp) with arguments ((null)) - ModelState is Valid
注意那些以
info:
开头的行?这些是默认日志记录设置Microsoft.Extensions.Logging
中使用时得到的标准控制台日志格式。但我在Program.cs
文件中调用了logging.ClearProviders();
来清除Console
提供者。感谢任何帮助。