大家好,首先请原谅我的英语不好,尽量做到尽可能准确。
我在.NET Framework 4.5中使用 log4net 3.5。
我实际面临的问题非常普遍。 log4net记录了两次。它没有配置xml文件,我使用静态类来执行此操作。
/// <summary>
/// Diese Klasse konfiguriert die Logs bei ausführungszeit
/// </summary>
public static class LoggerSetup
{
static LoggerSetup()
{
_fileDirectory = @"Log\";
_archiveInterval = 7;
Setup();
}
/// <summary>
/// Der Ort wo das Logfile gespeichert wird
/// </summary>
public static string FileDirectory
{
get
{
return _fileDirectory;
}
set
{
_fileDirectory = value;
Setup();
}
}
private static string _fileDirectory;
/// <summary>
/// Wieviele Tage die Logfiles im Speicher bleiben
/// </summary>
public static int ArchiveInterval
{
get
{
return _archiveInterval;
}
set
{
if (value <= 0)
value = 1;
_archiveInterval = value;
Setup();
}
}
private static int _archiveInterval;
private static void Setup()
{
// Here the hierarchy object is taken
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
// Pattern Layout defined
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%-5level] %message%newline";
patternLayout.ActivateOptions();
// configurating the RollingFileAppender object
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = FileDirectory + "Log.log";
roller.StaticLogFileName = true;
roller.PreserveLogFileNameExtension = true;
roller.LockingModel = new FileAppender.MinimalLock();
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = ArchiveInterval;
roller.RollingStyle = RollingFileAppender.RollingMode.Date;
roller.DatePattern = "_yyyy-MM-dd";
roller.ActivateOptions();
// Here it is added only once to the Root
hierarchy.Root.AddAppender(roller);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
}
}
我一直在查找其他一些页面,例如
在我发现的那些问题中,线程中有一个双重添加一个appender,大部分都被添加到根和一个logger对象。
正如您在上面的代码中所看到的,我只做了一次......有什么想法吗?每次更新属性时都会调用 Setup()方法,而不是其他任何方法。
我很感谢我得到的任何答案。
答案 0 :(得分:0)
我实际上是自己解决了...问题是,每次 Setup()执行时,就会有一个新的Rolling file appender实例添加到根目录。< / p>
我这样解决了:
private static RollingFileAppender _roller;
private static PatternLayout _patternLayout;
static LoggerSetup()
{
// root config
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
// appender vorbereiten
_roller = new RollingFileAppender();
_patternLayout = new PatternLayout();
_roller.Layout = _patternLayout;
hierarchy.Root.AddAppender(_roller);
_fileDirectory = @"Log\";
_archiveInterval = 7;
Setup();
}
public static void Setup()
{
_roller.AppendToFile = true;
_roller.File = FileDirectory + "Log.log";
_roller.StaticLogFileName = true;
_roller.PreserveLogFileNameExtension = true;
_roller.LockingModel = new FileAppender.MinimalLock();
_roller.MaxSizeRollBackups = ArchiveInterval;
_roller.RollingStyle = RollingFileAppender.RollingMode.Date;
_roller.DatePattern = "_yyyy-MM-dd";
_patternLayout.ConversionPattern = "%date [%-5level] %message%newline";
_patternLayout.ActivateOptions();
_roller.ActivateOptions();
}
现在可以根据需要多次执行Setup(),它不会再使appender加倍。