2012-11-15 137 views
1

我有以下代碼:默認log4net的配置

public Log4NetLogger() 
     : base(LogLevel.Debug) 
    { 
     if(!LogManager.GetRepository().Configured) 
     { 
      lock(mLocker) 
      { 
       if(!LogManager.GetRepository().Configured) 
       { 
        XmlConfigurator.Configure(); 
       } 
      } 
     } 

     mLog4NetInstance = LogManager.GetLogger(typeof(Log4NetLogger)); 
    } 

用下面的web.config:

<log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="Logs\MaMLog_" /> 
     <appendToFile value="true" /> 
     <StaticLogFileAppName value="false" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMMdd_dddd'.log'" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date{dd MMM yyyy HH:mm:ss,fff} [%thread] -() %message%newline" /> 
     </layout> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 
    <logger name="MyLog1"> 
     <level value="Debug" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </logger> 
    <logger name="MyLog2"> 
     <level value="Debug" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </logger> 
    </log4net> 

怎樣的代碼知道記錄器的名字嗎?如果有的話?

回答

3

由於您使用

mLog4NetInstance = LogManager.GetLogger(typeof(Log4NetLogger)); 

則記錄器名稱將是typeof(Log4NetLogger).FullName的數值通常形式YourNameSpace.Log4NetLogger

什麼都不會在這個例子中被記錄的,因爲你沒有一個具有該名稱的記錄器,並且您沒有根節回落,例如:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 
+0

'YourNameSpace.Log4NetLogger' - >然後我有t o如果我不願意使用''或者說啓動項目足夠多的話,那麼爲我的sln中的每個程序集定義一個記錄器? –

+1

如果您使用GetLogger(typeof(xxx)),那麼您可以使用命名空間的第一部分(不必與程序集名稱相關)。如果你的命名空間是MyCompany.MyProduct,那麼log4net將爲MyCompany.MyProduct.Log4NetLogger尋找一個記錄器,如果沒有找到它,它將爲MyCompany.MyProduct,然後MyCompany和最後的根記錄器尋找一個記錄器。 – sgmoore