2008-11-21 44 views

回答

39

This thread at the log4net Dashboard details an approach

总结了一下,希望不剥去太多代码:

using log4net; 
using log4net.Appender; 
using log4net.Layout; 
using log4net.Repository.Hierarchy; 

// Set the level for a named logger 
public static void SetLevel(string loggerName, string levelName) 
{ 
    ILog log = LogManager.GetLogger(loggerName); 
    Logger l = (Logger)log.Logger; 

    l.Level = l.Hierarchy.LevelMap[levelName]; 
    } 

// Add an appender to a logger 
public static void AddAppender(string loggerName, IAppender appender) 
{ 
    ILog log = LogManager.GetLogger(loggerName); 
    Logger l = (Logger)log.Logger; 

    l.AddAppender(appender); 
} 

// Create a new file appender 
public 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; 
} 

// In order to set the level for a logger and add an appender reference you 
// can then use the following calls: 
SetLevel("Log4net.MainForm", "ALL"); 
AddAppender("Log4net.MainForm", CreateFileAppender("appenderName", "fileName.log")); 

// repeat as desired 
+0

我已经采取了这种方法为我的程序集之一,而不是使用XML配置方法。在生成文件时,出于某种原因,与ILog日志相关的方法不会向文件写入任何内容。有没有一种方法可以让新的appender生效?我还没有找到这样的东西,但... – Dave 2012-03-26 15:34:16

+7

@Dave:我遇到了同样的问题,并通过将`l.Repository.Configured = true;`附加到`AddAppender`来解决它。 – Stephan 2012-04-20 10:55:39

3
using System; 
using Com.Foo; 
using System.Collections.Generic; 
using System.Text; 
using log4net.Config; 
using log4net; 
using log4net.Appender; 
using log4net.Layout; 
using log4net.Repository.Hierarchy; 


public class MyApp 
{ 


    public static void SetLevel(string loggerName, string levelName) 
    { 
     ILog log = LogManager.GetLogger(loggerName); 
     Logger l = (Logger)log.Logger; 

     l.Level = l.Hierarchy.LevelMap[levelName]; 
    } 

    // Add an appender to a logger 
    public static void AddAppender(string loggerName, IAppender appender) 
    { 
     ILog log = LogManager.GetLogger(loggerName); 
     Logger l = (Logger)log.Logger; 

     l.AddAppender(appender); 
    } 
    // Add an appender to a logger 
    public static void AddAppender2(ILog log, IAppender appender) 
    { 
     // ILog log = LogManager.GetLogger(loggerName); 
     Logger l = (Logger)log.Logger; 

     l.AddAppender(appender); 
    } 

    // Create a new file appender 
    public 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 [%logger] - %m%n"; 
     layout.ActivateOptions(); 

     appender.Layout = layout; 
     appender.ActivateOptions(); 

     return appender; 
    } 

    private static readonly ILog log = LogManager.GetLogger(typeof(MyApp)); 
    static void Main(string[] args) 
    { 
     BasicConfigurator.Configure(); 
     SetLevel("Log4net.MainForm", "ALL"); 
     AddAppender2(log, CreateFileAppender("appenderName", "fileName.log")); 
     log.Info("Entering application."); 
     Console.WriteLine("starting........."); 
     log.Info("Entering application."); 
     Bar bar = new Bar(); 
     bar.DoIt(); 
     Console.WriteLine("starting........."); 
     log.Error("Exiting application."); 
     Console.WriteLine("starting........."); 
    } 
} 


namespace Com.Foo 
{ 
    public class Bar 
    { 
     private static readonly ILog log = LogManager.GetLogger(typeof(Bar)); 

     public void DoIt() 
     { 
      log.Debug("Did it again!"); 
     } 
    } 
} 
1

我希望这可以帮助,它配置一个简单的控制台记录器。

static void Main(string[] args) 
{ 
    const string logLayoutPattern = 
     "[%date %timestamp][%level] %message %newline" + 
     "Domain: %appdomain, User: %username %identity %newline" + 
     "%stacktracedetail{10} %newline" + 
     "%exception %newline"; 

    var wrapperLogger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
    var logger = (Logger) wrapperLogger.Logger; 
    logger.Hierarchy.Root.Level = Level.All; 

    var consoleAppender = new ConsoleAppender 
    { 
     Name = "ConsoleAppender", 
     Layout = new PatternLayout(logLayoutPattern) 
    }; 

    logger.Hierarchy.Root.AddAppender(consoleAppender); 
    logger.Hierarchy.Configured = true; 

    wrapperLogger.Debug("Hello"); 
    Console.ReadKey(); 
}