Turns out the issue was not anyway related to
NLogor ASP.NET Logging system. Logging was configured correctly but the build server was publishing aDebugbuild to the Production due to a configuration error.
I am trying to setup a third party logger in my ASP.NET Core 2.0 (SDK 2.1.401) project. So far I have tried Serilog and NLog. However I am having same issue for both. To summarise the issue,
- It works as intended when I run the app like
dotnet run(ie. InDevelopmentenvironment) - But it does not when I run the binary
dotnet MyApplication.dll(ie. InProductionenvironment). - I do not have anything defined in
"Logging"section forDevelopmentenvironment in myappsettings.Development.jsonfile.
The issue described below is for NLog. I have tried SeriLog and hit the same issue.
Here is the relevant part from 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();
Note I have cleared all providers and added NLog also the nlog.config file is defined:
<?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>
When running in Development mode, I see the logs exactly as I expected
$ 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
However, when I run the app in Production envoronment, the console output looks as if I do not have NLog installed and I haven't cleared the default providers.
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
Notice those lines begins with info:? those are standard console logging format you get when you use the default logging setup defined in Microsoft.Extensions.Logging. But I definitely cleared Console provider by calling logging.ClearProviders(); in the Program.cs file.
Thanks for any help.
I was able to reproduce your problem and fix it. Please find my configuration here.
appsettings.json
nlog.config
Program.cs
added the following entry to .csproj file
Reference: