Log4net - 不创建日志文件

时间:2015-12-13 07:09:36

标签: c# logging log4net

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

当我运行静态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属性看起来更优雅,但是上面提到的可能值得一试。