【问题标题】:Log4net - Does not create a log fileLog4net - 不创建日志文件
【发布时间】:2015-12-13 07:09:35
【问题描述】:

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

【问题讨论】:

标签: c# logging log4net


【解决方案1】:

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

【讨论】:

  • 两种方法都试过了,还是不行:(有别的想法吗?
  • 我已通过工作示例的分步指南更新了我的答案。我不太确定这是您帖子中的拼写错误,还是您的实际代码中有此错误,但您显示的 XML 配置文件无效。例如,XML 声明缺少结束 ?,这也是无效的:&lt;layout ="log4net.Layout.SimpleLayout" /&gt;, ...
  • 嗯,很奇怪,这些相同的步骤对我来说效果很好。您使用的是哪个版本的log4net?我用的是最新的:2.0.5
  • 我测试了 2.0.8 版本,它可以工作。我以管理员身份运行应用程序。
【解决方案2】:

我只在运行静态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");
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2012-11-03
    • 1970-01-01
    • 2014-07-29
    • 2011-11-10
    • 2012-03-11
    相关资源
    最近更新 更多