簡體   English   中英

log4net無法登錄

[英]log4net fails to log

因此由於某種原因,我們的記錄器已停止記錄,而我完全不知道為什么。 我在項目中使用的是以下內容:

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文件中,而不是在其自己的文件中添加,但仍然無法從日志記錄中獲取任何信息。

嘗試打開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>

除了可能的文件權限問題外,我發現在使用時

[assembly: log4net.Config.XmlConfigurator()]

在ASP.NET項目中,它實際上不會做任何事情(我在使用調試字符串附加程序)。

對我來說,解決方案是在Application_Start甚至在global.asax中啟動log4net。

protected void Application_Start()
{
    log4net.Config.XmlConfigurator.Configure();
}

替換為:

<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();

讓我知道是否可以這樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM