4

所以由于某种原因,我们的记录器已经停止记录,我完全不知道为什么。我在我的项目中使用的是以下内容:

log4net 配置:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <root>
    <level value="DEBUG" />
    <appender-ref ref="UdpAppender" />
    <appender-ref ref="RollingFile" />
  </root>

  <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <remoteAddress value="127.0.0.1" />
    <remotePort value="8180" />
    <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
      <locationInfo value="true" />
    </layout>
  </appender>

  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="Logs/DA.RA.log"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <appendToFile value="true"/>
    <maxSizeRollBackups value="10"/>
    <maximumFileSize value="10MB"/>
    <rollingStyle value="Size"/>
    <staticLogFileName value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date %logger - %message%newline"/>
    </layout>
  </appender>
</log4net>

在我的 web.config 我有以下行:

<section name="log4net" 
         type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=a3d255455d3dcb36" 
         requirePermission="false"/>

在我的 global.asax 中,application_start 方法中有以下行:

string filename = Server.MapPath( @"~\XML\log4net.xml" );
log4net.Config.XmlConfigurator.ConfigureAndWatch( new System.IO.FileInfo( filename ) );

当我在我使用的任何页面中调用记录器时:

private static readonly ILog logger = LogManager.GetLogger(typeof(ReportParameters));

我尝试了很多我在网上找到的不同的东西。这些包括:

将以下行添加到我的项目中的程序集中

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

我试过:

[assembly: log4net.Config.XmlConfigurator()]

我已将 log4net.dll 的版本从 1.2.10.0 升级到 1.2.11.0。

我尝试将 log4net 附加程序添加到 web.config 文件而不是它自己的文件中,但我仍然没有从日志记录中得到任何信息。

4

3 回答 3

2

尝试打开log4net的内部调试并检查或分享结果:

注意:我制作了一个示例应用程序并使用了您相同的 log4net.xml 文件和 ConfigureAndWatch 语句,它可以正常工作。我认为您遇到了文件名路径解析问题或写入权限问题。创建日志文件夹如果你没有。

您需要添加到 web.config

<appSettings>
  <add key="log4net.Internal.Debug" value="true" />
 </appSettings>

 <system.diagnostics>
  <trace autoflush="true">
   <listeners>
    <add
     name="textWriterTraceListener"
     type="System.Diagnostics.TextWriterTraceListener"
     initializeData="c:\\inetpub\\wwwroot\\log4net.txt" />
   </listeners>
  </trace>
 </system.diagnostics>
于 2012-10-25T14:58:11.627 回答
0

除了可能的文件权限问题外,我发现使用时

[assembly: log4net.Config.XmlConfigurator()]

在 ASP.NET 项目中,它实际上永远不会做任何事情(我使用的是调试字符串附加程序)。

Application_Start我的解决方案是在 global.asax中启动 log4net 。

protected void Application_Start()
{
    log4net.Config.XmlConfigurator.Configure();
}
于 2012-10-25T14:40:11.947 回答
0

替换这个:

<section name="log4net" 
         type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=a3d255455d3dcb36" 
         requirePermission="false"/>

为了这:

<section name="log4net" 
         type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" 
         requirePermission="false"/>

而不是

log4net.Config.XmlConfigurator.ConfigureAndWatch()

称呼

log4net.Config.XmlConfigurator.Configure();

让我知道它是否可以这样工作

于 2012-10-25T14:49:07.173 回答