2017-07-20 195 views
0

我的Web配置的網絡API如下RollingAppander總是返回null而不是值

<appender name="MyLogger" type="log4net.Appender.RollingFileAppender"> 
    <file value="RenameFileInCode.txt" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="10MB" /> 
    <maxSizeRollBackups value="5" /> 
    <!-- rollingStyle value="Size" /--> 
    <rollingStyle value="Date" /> 
    <threshold value="DEBUG" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger %newline%message%newline%exception%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="DEBUG" /> 
    <levelMax value="ERROR" /> 
    </filter> 
</appender> 

和我的方法處理例。就像下面

public static void MaintainLog(string objname, Exception e) 
    { 
     //string LogName = objname + ".txt"; 
     string LogName = "SCRMpro_Log.txt"; 
     var user = UserManager.GetUserById(WebUtility.GetCurrentUserId()); 
     string filePath = GetClientWiseFilePath(user, "LOG"); //"//ErrorLogFile//"; 
     filePath = filePath + LogName; 
     // Bind to the root hierarchy of log4net 
     log4net.Repository.Hierarchy.Hierarchy root = 
      log4net.LogManager.GetRepository() 
      as log4net.Repository.Hierarchy.Hierarchy; 

     if (root != null) 
     { 
      // Bind to the RollingFileAppender 
      log4net.Appender.RollingFileAppender rfa = 
       (log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender"); 

      if (rfa != null) 
      { 
       // Assign the value to the appender 
       rfa.File = System.Web.HttpContext.Current.Server.MapPath(filePath); 

       // Apply changes to the appender 
       rfa.ActivateOptions(); 
      } 
     } 

,在這種方法我不能夠得到RollingFileAppander價值的總是空

log4net.Appender.RollingFileAppender rfa = 
      (log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender"); 

任何人都可以有這個解決方案大加讚賞。

+1

最可能的原因是,你還沒有加載的log4net的配置。如果你有,你需要調試它:在root.Root.GetAppender(「MyLogger」)調用上設置一個斷點,查看記錄器,看它是否已經加載了appender並且b)它有你期望的名字。呵呵,通常的做法是像LogManager.GetRepository()。GetAppenders()。OfType ()。FirstOrDefault()' – stuartd

回答

0

我認爲你必須給記錄器名稱:

 (log4net.Appender.RollingFileAppender)root.Root.GetAppender("MyLogger");