2009-07-08 5 views
0

Meine Anwendung wird auf einem angepassten Clientframework ausgeführt. Das Clientframework verwendet log4net, um eigene Protokolldateien zu protokollieren. Wir (unsere Anwendung) müssen das gleiche log4net verwenden, um unsere Protokolldateien in unserem eigenen Pfad zu protokollieren (sagen wir unseren benutzerdefinierten Pfad). Derzeit werden unsere Protokolldateien erstellt, aber protokolliert diese Datei nicht. Es schreibt in die Client-Framework-Protokolldatei.zum Schreiben von Protokolldateien in zwei verschiedene Dateien

Ich suchte viele Websites, um den Link Log4Net: Programmatically specify multiple loggers (with multiple file appenders) mir geholfen, die log4net Config programmatisch noch sind meine Log-Anweisungen geschrieben nicht file.The Code in meinem Protokoll wie unten

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; 
     } 

    } 
} 

Antwort

0

try Debuggen verwendet, zu konfigurieren log4net:

How to track down log4net problems

+0

Hallo Despart, danke für Ihre Info.aber ich benutze nicht die. Config-Datei für log4net. programmatisch im Ausführen der Konfigurationsdatei. –

0

Mein Vorsatz für dieses Problem:

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");   
    } 
Verwandte Themen