Log4net-不创建日志文件

本文关键字:文件 日志 创建 Log4net- | 更新日期: 2023-09-27 18:26:38

我使用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();

Log4net-不创建日志文件

如果这是一个可执行文件,我假设您的配置文件在生成的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");
    }

按照你所建议的方式,带有decorator属性似乎更优雅,但上面提到的可能值得一试。