C# 为什么';NuGet包NLog是否适用于.NET Core?
完成以下步骤C# 为什么';NuGet包NLog是否适用于.NET Core?,c#,.net-core,nlog,C#,.net Core,Nlog,完成以下步骤 创建新的.NET Core控制台项目(C#.NET Core 2.1) 添加NuGet包NLog,NLog.Config(目前是V4.5.8) 在class程序中添加记录器字段 static Logger logger = LogManager.GetCurrentClassLogger(); 添加logger.Info(“测试NLog”)在静态void Main(字符串[]args)中 但是,为什么运行程序不打印“Test NLog”?您可能有错误的版本。NuGet页
程序
中添加记录器字段
static Logger logger = LogManager.GetCurrentClassLogger();
logger.Info(“测试NLog”)代码>在静态void Main(字符串[]args)
中
但是,为什么运行程序不打印“Test NLog”?您可能有错误的版本。NuGet页面()提到了这一点: 支持的平台:
- .NET Framework 3.5、4、4.5、4.6和4.7
- .NET标准1.3+和2.0+
- .NET Framework 4客户端配置文件
- Android、Xamarin iOS
- 八,
- 4和5
- 四,
公共类程序
{
公共静态void Main(字符串[]args)
{
//NLog:首先设置记录器以捕获所有错误
var logger=NLog.Web.NLogBuilder.ConfigureNLog(“NLog.config”).GetCurrentClassLogger();
尝试
{
BuildWebHost(args.Run();
}
捕获(例外情况除外)
{
//NLog:捕获设置错误
logger.Error(例如,“由于异常而停止程序”);
投掷;
}
最后
{
//确保在应用程序退出之前刷新并停止内部计时器/线程(避免Linux上的分段错误)
NLog.LogManager.Shutdown();
}
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(日志=>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog()//NLog:为依赖项注入设置NLog
.Build();
}
文件nlog.config
自NLog 4.5以来,NLog完全支持.NET核心1和2
这个问题可能是nuget的问题,即nlog.config没有与nlog.config包一起安装
您应该检查nlog.config(并部署它)。如果不存在,则创建它
我建议阅读:
- -如果你想使用.NET的DI系统和ASP.NET Core 2,你需要这个
但是,运行程序不会打印“测试NLog”
您希望输出在哪里?请检查您的nlog.config。对于此,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
,而不是ASP.NET项目中显示的Content
。控制台应用程序不复制内容
文件
另外,确保配置文件的第一行是确保不使用NuGet包。并且不应该用于新项目(NuGet包的描述中也提到)
它会产生不必要的副作用,即在应用程序部署时重置实际的Nlog.config。当微软决定重新设计NuGet软件包格式时,NuGet软件包被破坏了
另请参见:既然支持.Net标准1.3+,它是否应该支持.Net core 2.1?我也这么认为,但我还没有尝试过2.1,也找不到任何明确提到2.0以上版本的文档。我试图将该项目更改为.Net core 2.0,但它也不起作用。我有一个使用.Net core 2.0的小型测试项目,它可以工作。我使用的是NLog.Web.AspNetCore 4.5.4,var logger=NLog.Web.NLogBuilder.ConfigureNLog(“NLog.config”).GetCurrentClassLogger();在Program.csI中添加了NLog.Web.AspNetCore
并删除了NLog
,但它仍然无法在我的机器上工作。
<ItemGroup>
<None Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>