企业库日志记录器的配置
本文关键字:配置 记录器 日志 企业库 | 更新日期: 2023-09-27 18:15:46
我想配置Enterprise Library Logger写入文件,直到它达到指定的大小。
当i达到指定的大小后,我希望它执行以下操作之一:
- 滚动文件(删除旧的日志行并添加新的日志行,而不是清除整个文件)
- 保留文件内容,清空日志文件(只保留一个备份文件)
目前我有一个文件的配置,每次文件满了就清除。这是我的配置
<listeners>
<add fileName="C:'ProgramData'Hamoub'Log'TransferLog.log"
formatter="Text Formatter"
header="----------------------------------------"
rollFileExistsBehavior="Overwrite"
rollSizeKB="100000"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
traceOutputOptions="None"
filter="All"
type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Rolling Flat File Trace Listener"/>
</listeners>
谢谢你的帮助
因此,仅在配置中无法做到这一点。
我的解决方案是在输出文件夹上添加FileSystemWatcher,每当在那里创建新文件时,我都会检查是否需要删除。
我在删除之前已经订购了文件夹文件,因此只有旧文件将被删除(保留当前和以前的日志文件)。
守望者代码:
try
{
FileSystemWatcher fsw = new FileSystemWatcher(@"C:'ProgramData'Hamoub'Log");
fsw.EnableRaisingEvents = true;
fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.DirectoryName | NotifyFilters.FileName;
fsw.Created += new FileSystemEventHandler(FileCreatedOnLogFolder);
}
catch (Exception ex)
{
Logger.Log("Failed creating file system watcher: " + ex.Message, Severity.Warning);
}
处理器代码:
void FileCreatedOnLogFolder(object sender, FileSystemEventArgs e)
{
try
{
DirectoryInfo logsDir = new DirectoryInfo(@"C:'ProgramData'Hamoub'Log");
var logFiles = logsDir.GetFiles("*TransferServiceTrace*.log");
var orderedLogFiles = logFiles.OrderBy(e => e.CreationTime);
if (orderedLogFiles.Count() > 1)
{
Logger.Log("Maintenance is needed, More than 2 log files found", Severity.Verbose);
for (int i = 0; i < orderedLogFiles.Count() - 2; i++)
{
try
{
var toDeleteFile = (orderedLogFiles.ElementAt(i) as FileInfo);
if (toDeleteFile != null)
{
toDeleteFile.Delete();
}
}
catch (Exception)
{
Logger.Log("Can't delete log file " + (orderedLogFiles.ElementAt(i) as FileInfo).Name, Severity.Warning);
}
}
// Store last file as TransferService.Last.Log
(orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).CopyTo(Path.Combine(logsDir.FullName, "TransferService.Last.Log"), true);
(orderedLogFiles.ElementAt(orderedLogFiles.Count() - 2) as FileInfo).Delete();
}
}
catch (Exception ex)
{
Logger.Log("Error during folder maintenance. " + ex.Message, Severity.Warning);
}
}
希望这篇文章能帮助那些寻找这样的解决方案的人
巴拉克Hamou看起来不像Enterprise Library 4.1滚动平面文件跟踪侦听器有这样的配置选项。
如果您更改为rollFileExistsBehavior="Increment"
,然后创建一个计划任务,该任务将删除除最近的两个文件外的所有文件,该怎么办?