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

如何配置NLog将日志保存为UTF8+BOM编码的文件?

问题描述

我使用以下代码配置NLog日志:

private static void SetupLogging(string logFile)
{
    var Config = new NLog.Config.LoggingConfiguration();
    var logfile = new NLog.Targets.FileTarget("logfile")
    {
        FileName = logFile,
        Layout = "${longdate}|${level:uppercase=true}|${logger}|${message:withException=true:exceptionSeparator=|}"
    };
    var logconsole = new NLog.Targets.ConsoleTarget("logconsole");

    Config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
    Config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);

    LogManager.Configuration = Config;
}

但生成的日志文件为UTF-8无BOM编码,而我依赖的CTextFileDocument库要求日志必须是UTF-8+BOM编码,请问该如何调整配置?

解决方案

要让NLog生成带BOM的UTF-8日志文件,只需为FileTarget指定对应的编码即可,以下是两种实现方式:

代码配置方式

在初始化FileTarget时,添加Encoding属性并设置为带BOM的UTF-8编码:

private static void SetupLogging(string logFile)
{
    var Config = new NLog.Config.LoggingConfiguration();
    var logfile = new NLog.Targets.FileTarget("logfile")
    {
        FileName = logFile,
        Layout = "${longdate}|${level:uppercase=true}|${logger}|${message:withException=true:exceptionSeparator=|}",
        // 指定带BOM的UTF-8编码
        Encoding = new System.Text.UTF8Encoding(true)
    };
    var logconsole = new NLog.Targets.ConsoleTarget("logconsole");

    Config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
    Config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);

    LogManager.Configuration = Config;
}

注:UTF8Encoding(true)中的true参数表示生成UTF-8 BOM,也可以直接使用System.Text.Encoding.UTF8(它默认会生成BOM),显式指定true会让代码意图更清晰。

配置文件方式(若使用NLog.config)

如果是通过配置文件管理NLog,可在file目标节点中添加encoding="utf-8-bom"属性:

<targets>
    <target name="logfile" xsi:type="File" 
            fileName="${basedir}/logs/logfile.txt" 
            layout="${longdate}|${level:uppercase=true}|${logger}|${message:withException=true:exceptionSeparator=|}"
            encoding="utf-8-bom" />
</targets>

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:12:40