log4net无法正常工作

Jak*_*kob 120 c# log4net .net-4.0

嘿,我在web.config中有这个配置

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <param name="File" value="mylog.log" />
        <param name="AppendToFile" value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="" />
            <param name="Footer" value="" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="[Header]\r\n" />
            <param name="Footer" value="[Footer]\r\n" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

但log4net无法正常工作.我的项目编译得很好,我也没有调试错误.我告诉的行log.debug("somemessage")可以正常运行,但我找不到mylog.log文件,所以它在哪里?

Kir*_*oll 289

对于这种类型的事情,一个问题是确保XmlConfigurator通过在以下行中放置以下行来将属性添加到程序集AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator]
Run Code Online (Sandbox Code Playgroud)

否则log4net永远不会激活.

  • 这个方法**用**在我的项目中工作,但它以某种方式停止工作.我不得不使用这种方法http://stackoverflow.com/a/1479343/193634再次使用它. (5认同)

Rob*_*ine 48

我想log4net根本就没有记录,或者文件没有​​达到预期的水平.

首先,你真的打过电话吗?

XmlConfigurator.Configure()
Run Code Online (Sandbox Code Playgroud)

你代码中的任何地方?如果上面的xml片段在应用程序配置文件中,则此调用将起作用.如果xml片段在其自己的文件中,则需要使用.Configure(string)获取文件路径的重载.如果没有这个调用(或者显然是Kirk Woll提到的程序集级别属性),那么log4net根本就不会记录.

如果您认为这一切都已完成,并且log4net应该是日志记录,那么您可能应该在进一步调试时为日志文件添加完全限定的路径.这将让你确定文件应该在哪里.


Ami*_*iri 30

还有另一个小问题,请看:http://logging.apache.org/log4net/release/manual/configuration.html#dot-config

[assembly: log4net.Config.XmlConfigurator]方法不适用于app.config.如果从app.config配置log4net,则必须使用该log4net.Config.XmlConfigurator.Configure()方法.


ear*_*g42 18

这是我的log4net被证明是顽固的清单:

  • 确保在构建时将log4net.config文件复制到bin \文件夹(在编译器中设置为"如果更新则复制")
    • 在处理已安装的代码时,请确保log4net.config出现(在编译器中设置为"Content")
  • 确保进程运行的用户具有写入日志的文件夹的写权限
  • 如果有疑问,给c:\ temp \赋予混杂权限并获取所有内容以登录到那里()
  • 启动Sysinternal/Dbgview.exe以查看是否有任何信息

  • "确保在构建时将log4net.config文件复制到bin \文件夹(在编译器中设置为'copy if newer')" - >保存我的一天!太厉害了! (3认同)

Ech*_*lon 7

这些是最终使我的文件记录工作的步骤:

  • -Check AssemblyInfo.cs包含以下属性. [assembly:log4net.Config.XmlConfigurator].这会加载log4net.
  • 检查日志目录是否具有写权限.
  • 检查记录器是否具有指定的格式.这是通过检查配置中的每个元素是否指定了布局元素来完成的.例如:

<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>

  • 最后,尝试打开log4net内部日志记录以启用控制台日志记录并检查控制台.为此,请添加<add key="log4net.Internal.Debug" value="true"/>到您的appSettings.


Ola*_*emo 7

对于ASPNET MVC项目添加

log4net.Config.XmlConfigurator.Configure();

到Global.asax.cs也有帮助:

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)


Joh*_*n K 5

我曾经历过日志记录系统无声地失败而不会引发异常的经历.我认为这是有道理的,因为如果记录器记录错误,那么如何记录它无法执行记录的错误?

因此,如果文件未在磁盘上创建,请首先查看文件系统权限,以确保您的应用程序正在运行的用户可以将新文件写入该磁盘位置.

出于测试目的,您可能希望手动在磁盘上创建应该写入的文件,并为每个人写入权限打开权限.如果记录器开始写入它,那么您知道它是基于权限而不是基于配置.