完成以下步骤。
在类Program
中添加记录器字段。
static Logger logger = LogManager.GetCurrentClassLogger();
在logger.Info("Test NLog");
中添加static void Main(string[] args)
。
但是,运行程序不会打印“ Test NLog”吗?
答案 0 :(得分:1)
从NLog 4.5开始,NLog完全支持.NET Core 1和2。
问题可能是nuget的问题,nlog.config没有随NLog.Config软件包一起安装。
您应该检查您的nlog.config(并部署它)。如果不存在,请创建它。
我建议阅读:
但是,运行程序不会打印“ Test NLog”吗?
您期望在哪里输出?还要检查您的nlog.config
答案 1 :(得分:1)
确保不要使用NLog.config-nuget-package。它是deprecated,不应用于新项目(也在nuget-package的说明中说)。
在应用程序部署上重置实际的Nlog.config具有不良的副作用。当Microsoft决定重新设计nuget-package格式时,nuget-package损坏了。
另请参阅:https://github.com/NLog/NLog/wiki/Getting-started-with-.NET-Core-2---Console-application
答案 2 :(得分:0)
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">
<targets>
<target name="logfile" xsi:type="File" fileName="file.txt" />
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
确保将以下内容添加到您的csproj文件中:
<ItemGroup>
<None Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
确保类型为None
,而不是ASPNET项目所示的Content
。控制台应用程序不会复制Content
文件。
此外,请确保配置文件的第一行是<?xml ...
元素。这是一个晦涩的问题,但是如果不在第一行,NLog将无法解析该文件。
如果其他所有方法均失败,请参阅出色的故障排除指南:https://github.com/NLog/NLog/wiki/Logging-troubleshooting
答案 3 :(得分:-1)
您可能使用了错误的版本。 nuget页面(https://www.nuget.org/packages/NLog)提到了这一点:
支持的平台:
对于ASP.NET Core,请检查:https://www.nuget.org/packages/NLog.Web.AspNetCore
.Net Core工作示例:
Program.cs
public class Program
{
public static void Main(string[] args)
{
// NLog: setup the logger first to catch all errors
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
BuildWebHost(args).Run();
}
catch (Exception ex)
{
//NLog: catch setup errors
logger.Error(ex, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog() // NLog: setup NLog for Dependency injection
.Build();
}
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="info"
internalLogFile="c:\temp\internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>