2011-11-15 16 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 the ConsoleAppenderは正常に動作します。外部VSを実行しても動作しません – BenCr

+0

@MattDawdy、私はおそらく言及すべきことは、x64アプリケーションになることです。 – BenCr

答えて

7

、。 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)] BasicConfigurator.Configure(

AssemblyInfo.csに追加)のみ、コンソールに書き込むことができます。

+0

+1で私がコメントに示唆したことをきちんと入れてください:) –

+0

乾杯。 assemblyInfo.csからのガボンがありません – geedubb

1

あなたはRollingFileAppenderを試してみましたか?あなたの代わりにXmlConfiguratorのBasicConfigurator(のみConsoleAppenderをサポートしています)を使用することを私は仮定し、あなたの説明に基づいて

<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このヘルパークラスを作成した)1は、両方のアペンダを開始することができ、両方のアペンドが動作する他のDLLを呼び出すDLLので、もしあなたがアプリケーション間で必要とするなど、多くのアペンダを開始することができます。 2)はまた、あなたがアペンダを閉じることができますし、(ファイルアペンダの場合)のように、その後

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) 
    { 


    } 
}