2011-11-15 96 views
4

我的FileAppender无法正常工作。这可能不是一个权限的事情,因为我是本地管理员。Log4Net File Appender Not Logging

我已经启用了内部调试,并且没有从log4net收到任何错误或异常。

我的配置文件如下。 感谢

<log4net> 
     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
      </layout> 
     </appender> 
     <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
      <file value="C:\log-file.txt" /> 
      <appendToFile value="true" /> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
      </layout> 
     </appender> 
     <root> 
      <level value="DEBUG" /> 
      <appender-ref ref="ConsoleAppender" /> 
      <appender-ref ref="FileAppender" /> 
     </root> 
    </log4net> 

登录的代码实际上是: -

public class Logger 
{ 
    private static readonly ILog defaultLog; 
    static Logger() 
    { 
     BasicConfigurator.Configure(); 
     defaultLog = LogManager.GetLogger("default"); 
    } 

    public static void Log(string errorMessage, Exception exception) 
    { 
     defaultLog.Error(errorMessage, exception); 
    } 
} 
+0

尝试运行你的EXE,而不是直接通过Visual Studio。看看它是否被创建。另外,ConsoleAppender的工作?你用来调用log4net的代码是什么? –

+0

@Matt ConsoleAppender工作正常。在VS之外运行也不行,或者 – BenCr

+0

@MattDawdy,我应该提到的一件事情是它被迫成为一个x64应用程序 – BenCr

回答

7

根据您的描述我认为,您所使用的BasicConfigurator(只支持是ConsoleAppender)而不是XmlConfigurator。切换到XmlConfigurator应该可以解决您的问题。

+2

特别是:*调用BasicConfigurator.Configure()方法会创建一个相当简单的log4net安装程序。这个方法是硬连接的,可以将一个ConsoleAppender添加到根记录器。输出将使用设置为模式“%-4timestamp [%thread]%-5level%logger%ndc - %message%newline”的PatternLayout格式化。*' (http://logging.apache.org/log4net /release/manual/configuration.html) –

6

有2个主要选项启用日志记录。有关更多详细信息,请参阅Configuration手册。

  1. 使用XmlConfigurator.Configure()
  2. 添加[assembly: log4net.Config.XmlConfigurator(Watch=true)]AssemblyInfo.cs

BasicConfigurator.Configure()只能写入控制台。

+0

+1,用于放置我在评论中建议的内容:) –

+0

干杯。缺少assemblyInfo.cs中的gubbins – geedubb

1

你试过RollingFileAppender吗?

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" > 
    <file value="C:\log-file.txt" /> 
    <maximumFileSize value="10MB" /> 
    <maxSizeRollBackups value="10" /> 
    <rollingStyle value="Composite" /> 
    <appendToFile value="true" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> 
    </layout> 
</appender> 
0

我创造了这个辅助类

1)你可以启动尽可能多的附加器,你需要在整个应用程序,所以如果一个DLL调用的dll等既可以启动附加目的地和两个附加会工作。 2)你也可以关闭的appender和(如文件附加器的情况下),然后把它作为一个电子邮件

Log4NetFileHelper log = new Log4NetFileHelper(); 
     log.Init(); //Initialize 
     log.AddConsoleLogging(); //Add Console Logging 
     log.AddFileLogging(Path.Combine(AssemblyDirectory, "BatchConsole.log")); //Add Console Logging 
     log.AddFileLogging(Path.Combine(AssemblyDirectory, "BatchConsole_error.log"),log4net.Core.Level.Error); //Add Console Logging 



public class Log4NetFileHelper 
{ 
    private string DEFAULT_LOG_FILENAME=string.Format("application_log_{0}.log",DateTime.Now.ToString("yyyyMMMdd_hhmm")); 
    Logger root; 
    public Log4NetFileHelper() 
    { 

    } 

    public virtual void Init() 
    { 
     root = ((Hierarchy)LogManager.GetRepository()).Root; 
     //root.AddAppender(GetConsoleAppender()); 
     //root.AddAppender(GetFileAppender(sFileName)); 
     root.Repository.Configured = true; 
    } 

    #region Public Helper Methods 
    #region Console Logging 
    public virtual void AddConsoleLogging() 
    { 
     ConsoleAppender C = GetConsoleAppender(); 
     AddConsoleLogging(C); 
    } 

    public virtual void AddConsoleLogging(ConsoleAppender C) 
    { 
     root.AddAppender(C); 
    } 
    #endregion 

    #region File Logging 
    public virtual FileAppender AddFileLogging() 
    { 
     return AddFileLogging(DEFAULT_LOG_FILENAME); 
    } 

    public virtual FileAppender AddFileLogging(string sFileFullPath) 
    { 
     return AddFileLogging(sFileFullPath, log4net.Core.Level.All); 
    } 

    public virtual FileAppender AddFileLogging(string sFileFullPath, log4net.Core.Level threshold) 
    { 
     return AddFileLogging(sFileFullPath, threshold,true); 
    } 

    public virtual FileAppender AddFileLogging(string sFileFullPath, log4net.Core.Level threshold, bool bAppendfile) 
    { 
     FileAppender appender = GetFileAppender(sFileFullPath, threshold , bAppendfile); 
     root.AddAppender(appender); 
     return appender; 
    } 

    public virtual SmtpAppender AddSMTPLogging(string smtpHost, string From, string To, string CC, string subject, log4net.Core.Level threshhold) 
    { 
     SmtpAppender appender = GetSMTPAppender(smtpHost, From, To, CC, subject, threshhold); 
     root.AddAppender(appender); 
     return appender; 
    } 

    #endregion 


    public log4net.Appender.IAppender GetLogAppender(string AppenderName) 
    { 
     AppenderCollection ac = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root.Appenders; 

     foreach(log4net.Appender.IAppender appender in ac){ 
      if (appender.Name == AppenderName) 
      { 
       return appender; 
      } 
     } 

     return null; 
    } 

    public void CloseAppender(string AppenderName) 
    { 
     log4net.Appender.IAppender appender = GetLogAppender(AppenderName); 
     CloseAppender(appender); 
    } 

    private void CloseAppender(log4net.Appender.IAppender appender) 
    { 
     appender.Close(); 
    } 

    #endregion 

    #region Private Methods 

    private SmtpAppender GetSMTPAppender(string smtpHost, string From, string To, string CC, string subject, log4net.Core.Level threshhold) 
    { 
     SmtpAppender lAppender = new SmtpAppender(); 
     lAppender.Cc = CC; 
     lAppender.To = To; 
     lAppender.From = From; 
     lAppender.SmtpHost = smtpHost; 
     lAppender.Subject = subject; 
     lAppender.BufferSize = 512; 
     lAppender.Lossy = false; 
     lAppender.Layout = new 
     log4net.Layout.PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n"); 
     lAppender.Threshold = threshhold; 
     lAppender.ActivateOptions(); 
     return lAppender; 
    } 

    private ConsoleAppender GetConsoleAppender() 
    { 
     ConsoleAppender lAppender = new ConsoleAppender(); 
     lAppender.Name = "Console"; 
     lAppender.Layout = new 
     log4net.Layout.PatternLayout(" %message %n"); 
     lAppender.Threshold = log4net.Core.Level.All; 
     lAppender.ActivateOptions(); 
     return lAppender; 
    } 
    /// <summary> 
    /// DETAILED Logging 
    /// log4net.Layout.PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n"); 
    /// 
    /// </summary> 
    /// <param name="sFileName"></param> 
    /// <param name="threshhold"></param> 
    /// <returns></returns> 
    private FileAppender GetFileAppender(string sFileName , log4net.Core.Level threshhold ,bool bFileAppend) 
    { 
     FileAppender lAppender = new FileAppender(); 
     lAppender.Name = sFileName; 
     lAppender.AppendToFile = bFileAppend; 
     lAppender.File = sFileName; 
     lAppender.Layout = new 
     log4net.Layout.PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %message (%logger{1}:%line)%n"); 
     lAppender.Threshold = threshhold; 
     lAppender.ActivateOptions(); 
     return lAppender; 
    } 

    //private FileAppender GetFileAppender(string sFileName) 
    //{ 
    // return GetFileAppender(sFileName, log4net.Core.Level.All,true); 
    //} 

    #endregion 

    private void ConfigureLog(string sFileName) 
    { 


    } 
}