Log4net - 不创建日志文件

Log4net - Does not create a log file

我正在使用 log4net 创建日志,但它没有任何作用。

这里是 app.config:

<?xml version="1.0" encoding="utf-8">
<configuration>
    <configSection>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSection>
    <log4net>
        <appender name="WriteToFile" type="log4net.Appender.FileAppender">
            <file value="log.txt" />
            <layout ="log4net.Layout.SimpleLayout" />
        </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="WriteToFile"/>
        </root>
    </log4net>
</configuration>

我在 AssemblyInfo.cs 中有以下行:

[assembly: log4net.Config.XmlConfigur(ConfigFile ="App.config", Watch= true)]

这是写入文件的尝试:

private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

public void write()
{
    log.Info("Some text here");
}

以及下一行:

log4net.Config.XmlConfigurator.Configure();

如果这是一个可执行文件,我想您的配置文件不会在生成的 bin 文件夹中被称为 App.config,而是 MyApp.exe.config。所以你可以尝试解决这个问题:

ConfigFile ="App.config"

如果您使用的是默认值,您也可以跳过配置文件名:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

还要确保您 运行 您的应用程序所使用的帐户对您希望写入日志文件的文件夹具有写入权限。


更新:

分步指南:

  1. 创建新的控制台应用程序
  2. 安装 log4net NuGet
  3. 在您的 App.config 中使用以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
        <log4net>
            <appender name="WriteToFile" type="log4net.Appender.FileAppender">
                <file value="log.txt" />
                <layout type="log4net.Layout.SimpleLayout" />
            </appender>
            <root>
                <level value="ALL" />
                <appender-ref ref="WriteToFile" />
            </root>
        </log4net>
    </configuration>
    
  4. 在你的 Program.cs:

    using log4net;
    using System.Reflection;
    
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    
    namespace ConsoleApplication1
    {
        class Program
        {
            private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    
            static void Main(string[] args)
            {
                log.Info("Some text here");
            }
        }
    }
    

我只有在 运行 静态 Configure 方法时才成功使用 log4net:

        log4net.Config.XmlConfigurator.Configure();

用下面的一种方法包装它读取应用程序的默认配置,无论是 web.config 还是 app.config:

    private static void InitLogging()
    {
        log4net.Config.XmlConfigurator.Configure();
        _logger = Common.Logging.LogManager.GetLogger(typeof(Program));
        _logger.Debug("Logging initialized");
    }

按照你建议的方式使用装饰器属性似乎更优雅,但上面提到的可能值得一试。