如何(编程方式,无xml配置)配置Log4Net多个记录器? 我需要它们写入不同的文件。Log4Net:以编程方式指定多个记录器(与多个文件appender)
31
A
回答
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
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();
}
相关问题
- 1. 使用多个log4net文件记录器
- 2. Log4Net多个SMTP appender?
- 3. Log4net一个FileAppender元素,以编程方式登录到多个文件
- 4. 与log4net的多个记录到多个文件
- 5. Log4net可以有多个appender写入同一个文件吗?
- 6. Log4Net C# - 与动态文件名appender多线程日志记录问题
- 7. Log4Net以编程方式检查Appender过滤器的IsEnabledFor
- 8. logback中的每个记录器的特定appender的多个记录器
- 9. 使用log4net记录多个程序集
- 10. log4net集中记录多个组件
- 11. 同一个Log4net文件中的多个appender
- 12. 以编程方式与多个用户共享文件夹
- 13. log4net的:多记录器
- 14. 设置多个阈值+ Log4Net Appender
- 15. log4net - 使用多个appender的日志
- 16. Log4j XML - 多个文件appender
- 17. 以编程方式编写多个CSV文件
- 18. 多个配置文件与Log4Net
- 19. PyMongo更新文件与多个记录
- 20. 以编程方式配置记录器
- 21. 以编程方式配置多个NIC
- 22. 以编程方式创建多个UIImageViews
- 23. 以编程方式运行多个类
- 24. 以编程方式创建多个LinearLayouts
- 25. Log4Net从多个进程写入文件
- 26. Python记录多个文件
- 27. Log4Net记录多个线程中单个会话的IP地址
- 28. Python使用同一个记录器记录多个文件
- 29. LOG4J:一个记录器的一个appender
- 30. 以编程方式将数据设置为多个文件
我已经采取了这种方法为我的程序集之一,而不是使用XML配置方法。在生成文件时,出于某种原因,与ILog日志相关的方法不会向文件写入任何内容。有没有一种方法可以让新的appender生效?我还没有找到这样的东西,但... – Dave 2012-03-26 15:34:16
@Dave:我遇到了同样的问题,并通过将`l.Repository.Configured = true;`附加到`AddAppender`来解决它。 – Stephan 2012-04-20 10:55:39