You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同时使用NLog与Serilog时NLog失效问题求助

NLog与Serilog共存时NLog失效的解决办法

当同时引入Serilog(3.0.1版本)和NLog后,NLog无法正常工作、仅Serilog能运行的核心原因,通常是Serilog替换了.NET默认的日志服务提供者,导致NLog的注册或配置未被正确加载。以下是具体解决步骤:

1. 同时注册两个日志框架

在应用启动代码(比如Program.cs)里,要明确初始化并注册NLog和Serilog,不能只初始化其中一个。以ASP.NET Core为例:

// 先初始化NLog
var nlogConfig = new NLogLoggingConfiguration("nlog.config");
NLog.LogManager.Setup().LoadConfigurationFromConfiguration(nlogConfig);

// 再初始化Serilog
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();

// 清除默认日志提供者避免冲突,同时添加两个框架的提供者
builder.Logging.ClearProviders();
builder.Logging.AddNLog(nlogConfig);
builder.Logging.AddSerilog();

2. 检查NLog配置文件的输出属性

确保你的nlog.config文件属性设置为复制到输出目录(右键文件→属性→复制到输出目录:选择“如果较新则复制”),防止Serilog引入后NLog找不到配置文件导致失效。

3. 禁用Serilog的自动注册

Serilog的NuGet包可能通过SDK特性自动注册,覆盖NLog的配置。可以在csproj文件中添加以下配置禁用自动注册:

<PropertyGroup>
  <SerilogAutoRegister>false</SerilogAutoRegister>
</PropertyGroup>

4. 手动指定NLog的输出目标

如果上面的方法都无效,可以直接在代码里为NLog配置输出目标,确保它不受Serilog影响:

var nlogConfig = new NLog.Config.LoggingConfiguration();
// 添加控制台输出目标
var consoleTarget = new NLog.Targets.ConsoleTarget("consoleTarget");
nlogConfig.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, consoleTarget);
// 应用配置
NLog.LogManager.Configuration = nlogConfig;

内容的提问来源于stack exchange,提问作者Amirhossein Ghk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:09