2011-12-28 60 views
24

我用我的ASP.NET MVC3項目log4net的,但所有的日誌記錄屬性,如IsDebugEnabled ==假爲什麼我所有的log4net級別都是假的?

在我的AssemblyInfo我:

[assembly: XmlConfigurator(Watch = true)] 

在我的日誌類我有

Web.Config中
public Log4NetLogger() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
} 

我的相關配置的東西是:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

    <log4net debug="false"> 
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="{removed}" /> 
     <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
     <parameter> 
      <parameterName value="@log_date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@thread" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@log_level" /> 
      <dbType value="String" /> 
      <size value="50" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@logger" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@message" /> 
      <dbType value="String" /> 
      <size value="4000" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@exception" /> 
      <dbType value="String" /> 
      <size value="2000" /> 
      <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     </appender> 
     <!--Possible levels:--> 
     <!--DEBUG--> 
     <!--INFO--> 
     <!--WARN--> 
     <!--ERROR--> 
     <!--FATAL--> 
     <root> 
     <level value="All" /> 
     <appender-ref ref="AdoNetAppender" /> 
     </root> 
    </log4net> 

    </applicationSettings> 

</configuration> 

我已經很沮喪,只是想要做

public Log4NetLogger() 
{ 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    Logger.IsDebugEnabled = true; 
} 

點不過當然Logger.IsDebugEnabled沒有任何setter方法:/

我有什麼做的就是這個該死的東西的工作?

+0

如果您對此問題進行了排序,您是否可以批准以下答案之一? – 2017-10-16 08:33:31

回答

2

我從來沒有見過<level value="All" />之前,通常我只設置value的級別之一(因爲他們是包容在他們之上的水平,或低於他們爲你讓他們在你的配置上市,在水平堆棧)。事情是這樣的:

<level value="DEBUG" /> 

您也可以嘗試使用顯式記錄儀測試它,只是爲了看看這個問題可能是別的東西。一些簡單的相鄰節點appender(一個或多個)是這樣的:

<logger name="Log4NetTEST" > 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

然後在你的代碼測試它,當你創建的記錄是這樣的:

LogManager.GetLogger("Log4NetTEST"); 
+2

我使用''成功使用年:-) – 2011-12-28 16:35:42

+2

fwiw:Log4Net可能的值有:ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF。請記住,這些也是區分大小寫的。 – 2012-01-02 18:33:16

6

log4net的預計,其配置節不分組。因爲在您的配置中,您已將log4net部分放入ApplicationSettingsGroup (applicationSettings),log4net將無法找到其配置。你可以調用XmlConfigurator.Configure當移動log4net的部分組外,也可以指定組:

XmlConfigurator.Configure(
    ConfigurationManager.GetSection(
     "applicationSettings/log4net") as XmlElement); 
+0

真棒修復!這也是驅使我堅果! – nterry 2014-10-12 05:18:35

3

日誌級別是區分大小寫的,所以不是:

<level value="All" />

應該

<level value="ALL" />

我也覺得它更容易創建一個單獨的log4net的conf配置文件。創建一個名爲log4net.config和複製的屬性設置爲輸出目錄始終複製 - (複製從App.config中配置到該文件)

然後,將配置使用時:

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

23

我有這個相同的問題。我通過在Global.asax.cs中使用Application_Start方法中的以下代碼行來避開它(假設其爲a。淨Web應用程序)

log4net.Config.XmlConfigurator.Configure(); 
16

你行更改在AssemblyInfo.cs如下:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

,並把log4net的的配置在該文件中。

0

,因爲它是隻讀沒有對IsDebugEnabled設定裝置..

使用log4net.Config.XmlConfigurator.Configure();在您使用日誌

和之前的app.config任何方法的設置應該是:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="AppenderName" /> 
    </root> 
0

更改行中的AssemblyInfo.cs以下幾點:

[裝配:log4net.Config.XmlConfigurator (觀看=真)]

確保log4net的DLL,並將也把log4net的的配置在web.config文件作爲

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="C:\LOGS\IDMUserRoleManagement\IDMUserRoleManagement.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy-MM-ddTHH:mm:ss} %-5p [%t] - %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 
2

看起來你錯過了配置文件屬性設置更改複製到輸出目錄 =「總是複製」 請檢查此設置圖像的更多詳細信息。 Config file setting Properties

0

您錯過了applicationSettings的開始標記。這可能是原因

0

如果類日誌文件(Log4NetLogger)是一個單獨的類庫,那麼代碼: [裝配:log4net.Config.XmlConfigurator(C .... 應該是在同一個類庫。

例如: LIB 1:my.web(一個MVC項目) LIB 2:my.common(一個類庫項目)如果在my.common包裹LogManager的代碼,然後

「[彙編:log4net.Config.XmlConfigurator(C ...「應該在my.common中,如果你把它放在my.web中,它將不起作用!

相關問題