2009-07-08 16 views
0

私のアプリケーションはカスタマイズされたクライアントフレームワーク上で動作し、クライアントフレームワークはlog4netを使用して独自のログファイルを記録します。私たちのアプリケーションでは、同じlog4netを使用して独自のパス(たとえば、カスタマイズされたパス)でログファイルをログに記録する必要があります。現在、私たちのログファイルは作成されていますが、ログはそのファイルに書き込まれていません。これは、クライアントフレームワークのログファイルに書き込んでいます。私は多くのサイトにリンク Log4Net: Programmatically specify multiple loggers (with multiple file appenders) を検索ログファイルを2つの異なるファイルに書き込む

がプログラムlog4netの設定ファイルを設定するには、私を助け、 まだ私のログステートメントは

public class TraceLog 
    { 
     private string message = string.Empty;   
     private static ILog ILogger = null; 
     private static TraceLog instance = new TraceLog(); 
     private TraceLog() 
     { 
      SetLevel("Log4net.MainForm", "ALL"); 
      AddAppender("Log4net.MainForm", CreateFileAppender("FileAppender", "C:\\mylog.log")); 
     }   
     public static TraceLog Instance 
     { 
      get 
      { 
       return instance; 
      } 
     }  
     public void Debug(string logMessage) 
     { 
      message = PrepareLog(logMessage); 
      ILogger.Debug(message); 
     } 
     protected string PrepareLog(string logMessage) 
     { 
      string message = GetFileMethodLineNumberInfo(); 
      message += logMessage; 
      return message; 
     }  
     protected string GetFileMethodLineNumberInfo() 
     { 
      StackTrace stackTrace = new StackTrace(true); 
      // The position 3 is relative to the index of the specified method 
      StackFrame stackFrame = stackTrace.GetFrame(3); 
      return (stackFrame.GetMethod().DeclaringType.Name 
       + "/" + stackFrame.GetMethod().Name 
       + "/" + stackFrame.GetFileLineNumber() 
       + ":"); 
     } 
     private static void SetLevel(string loggerName, string levelName) 
     { 
      ILogger = LogManager.GetLogger(loggerName); 
      log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)ILogger.Logger; 
      l.Level = l.Hierarchy.LevelMap[levelName]; 
     }   
     private static void AddAppender(string loggerName, IAppender appender) 
     { 
      ILogger = LogManager.GetLogger(loggerName); 
      log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)ILogger.Logger; 
      l.AddAppender(appender); 
     } 
     private static IAppender CreateFileAppender(string name, string fileName) 
     { 
      FileAppender appender = new FileAppender(); 
      appender.Name = name; 
      appender.File = fileName; 
      appender.AppendToFile = true; 
      //PatternLayout layout = new PatternLayout(); 

      //layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n"; 
      //layout.ActivateOptions(); 
      //appender.Layout = layout; 
      appender.ActivateOptions(); 
      return appender; 
     } 

    } 
} 

答えて

0

デバッグしようと以下のように使用し、私のログfile.theコードで書かれていませんlog4netの:

How to track down log4net problems

+0

こんにちはDespart、 私はinfo.butのためにありがとう、私はlog4netの.configファイルを使用していません。コンフィグレーションファイルをプログラム的に実行しています。 –

0

この問題に対する私の決意:

public static void AddAppenderToLogger(string loggerName, string fileName) { 
    FileAppender appender = new FileAppender(); 
    appender.Name = string.Format("appender_{0}", loggerName); 
    appender.File = fileName; 
    appender.AppendToFile = true; 
    appender.Layout = new PatternLayout("%date - %message%newline"); 
    appender.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); 
    appender.ActivateOptions(); 
    ILoggerRepository repository = LogManager.CreateRepository(string.Format("repository_{0}",loggerName)); 
    log4net.Config.BasicConfigurator.Configure(repository, appender); 
} 
public static ILog GetLogger(string loggerName){ 
    return LogManager.GetLogger(string.Format("repository_{0}", loggerName), loggerName); 
} 

//Using in application code: 
    static void Main(string[] args) { 
     AddAppenderToLogger("test", @"c:\testLog.txt"); 
     ILog log = GetLogger("test"); 
     log.Info("TestRecord");   
    }