C# log4net 不輸出日志


一個新項目,直接用了一些之前的代碼,突然跟蹤不到日志了。檢查發現了原因,特在此記錄。

log4net的配置文件log4net_config.xml

View Code
<? xml version="1.0" encoding="utf-8"  ?>
< log4net >
     < appender  name ="TastInfo"  type ="log4net.Appender.RollingFileAppender" >
         < file  value ="Log\\Info\\"   />
         < appendToFile  value ="true"   />
         < rollingStyle  value ="Composite"   />
         < maxSizeRollBackups  value ="-1"   />
         < maximumFileSize  value ="1MB"   />
         < staticLogFileName  value ="false"   />
         < DatePattern  value ="yyyy-MM-dd&quot;.txt&quot;" />
         < layout  type ="log4net.Layout.PatternLayout" >
             < conversionPattern  value ="%date  %-5level  - %message%newline"   />
         </ layout >
     </ appender >
     < appender  name ="TastError"  type ="log4net.Appender.RollingFileAppender" >
         < file  value ="log\\Error\\"   />
         < appendToFile  value ="true"   />
         < rollingStyle  value ="Composite"   />
         < maxSizeRollBackups  value ="-1"   />
         < maximumFileSize  value ="1MB"   />
         < staticLogFileName  value ="false"   />
         < DatePattern  value ="yyyy-MM-dd&quot;.txt&quot;" />
         < layout  type ="log4net.Layout.PatternLayout" >
             < conversionPattern  value ="%date  %-5level - %message%newline"   />
         </ layout >
     </ appender >
     < appender  name ="TastDebug"  type ="log4net.Appender.RollingFileAppender" >
         < file  value ="log\\Debug\\"   />
         < appendToFile  value ="true"   />
         < rollingStyle  value ="Composite"   />
         < maxSizeRollBackups  value ="-1"   />
         < maximumFileSize  value ="1MB"   />
         < staticLogFileName  value ="false"   />
         < DatePattern  value ="yyyy-MM-dd&quot;.txt&quot;" />
         < layout  type ="log4net.Layout.PatternLayout" >
             < conversionPattern  value ="%date  %-5level - %message%newline"   />
         </ layout >
     </ appender >
     < logger  name ="Info" >
         < level  value ="ALL" />
         < appender-ref  ref ="Info"   />
         < appender-ref  ref ="TastInfo"   />
     </ logger >
     < logger  name ="Error" >
         < level  value ="ALL" />
         < appender-ref  ref ="Error"   />
         < appender-ref  ref ="TastError"   />
     </ logger >
     < logger  name ="Debug" >
         < level  value ="ALL" />
         < appender-ref  ref ="Debug"   />
         < appender-ref  ref ="TastDebug"   />
     </ logger >
</ log4net >

log4net的應用錯誤代碼:

View Code
  public  class Log
    {
         private  static  string DefaultName =  " log ";

         static Log()
        {
             string path = AppDomain.CurrentDomain.BaseDirectory +  @" \log4net_config.xml ";
            log4net.Config.XmlConfigurator.Configure( new FileInfo(path));
        }

         public  static log4net.ILog GetLog( string logName)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(logName);
             return log;
        }

         public  static  void debug( string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsDebugEnabled)
                log.Debug(message);

            log =  null;
        }

         public  static  void debug( string message, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsDebugEnabled)
                log.Debug(message, ex);

            log =  null;
        }

         public  static  void error( string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsErrorEnabled)
                log.Error(message);

            log =  null;
        }

         public  static  void error( string message, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsErrorEnabled)
                log.Error(message, ex);

            log =  null;
        }

         public  static  void fatal( string message)
        {

            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsFatalEnabled)
                log.Fatal(message);

            log =  null;
        }

         public  static  void info( string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsInfoEnabled)
                log.Info(message);

            log =  null;
        }

         public  static  void warn( string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsWarnEnabled)
                log.Warn(message);

            log =  null;
        } 
    }

不輸出日志的原因是因為, 默認private static string DefaultName = "log",在配置文件里面找不到對應的節點值。

正確的應用代碼:

View Code
public  class Log
    {
         private  const  string SError =  " Error ";
         private  const  string SDebug =  " Debug ";
         private  const  string DefaultName =  " Info ";

         static Log()
        {
             var path = AppDomain.CurrentDomain.BaseDirectory +  @" \log4net_config.xml ";
            log4net.Config.XmlConfigurator.Configure( new FileInfo(path));
        }

         public  static log4net.ILog GetLog( string logName)
        {
             var log = log4net.LogManager.GetLogger(logName);
             return log;
        }

         public  static  void Debug( string message)
        {
             var log = log4net.LogManager.GetLogger(SDebug);
             if (log.IsDebugEnabled)
                log.Debug(message);
        }

         public  static  void Debug( string message, Exception ex)
        {
             var log = log4net.LogManager.GetLogger(SDebug);
             if (log.IsDebugEnabled)
                log.Debug(message, ex);
        }

         public  static  void Error( string message)
        {
             var log = log4net.LogManager.GetLogger(SError);
             if (log.IsErrorEnabled)
                log.Error(message);
        }

         public  static  void Error( string message, Exception ex)
        {
             var log = log4net.LogManager.GetLogger(SError);
             if (log.IsErrorEnabled)
                log.Error(message, ex);
        }

         public  static  void Fatal( string message)
        {
             var log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsFatalEnabled)
                log.Fatal(message);
        }

         public  static  void Info( string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsInfoEnabled)
                log.Info(message);
        }

         public  static  void Warn( string message)
        {
             var log = log4net.LogManager.GetLogger(DefaultName);
             if (log.IsWarnEnabled)
                log.Warn(message);
        } 
    }
總結: log4net.LogManager.GetLogger(Name),這里面的Name要在配置文件中,有對應的節點值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM