Enterprise Library 5.0:在没有XML配置的情况下将日志写入文件
本文关键字:情况下 日志 文件 配置 XML Library Enterprise | 更新日期: 2023-09-27 18:12:16
有一些记录到文件的代码。我不使用app.config
class Program
{
static void Main(string[] args)
{
MyLogger.Write("This is message error", "My Category");
Console.ReadKey();
}
}
public static class MyLogger
{
static readonly LogWriterImpl _writer;
static MyLogger()
{
TextFormatter formatter = new TextFormatter
("Timestamp: {timestamp}{newline}" +
"Message: {message}{newline}" +
"Category: {category}{newline}");
var logFileListener = new Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener
(
"c:''messages.log", "----------", "----------", formatter
);
LogSource mainLogSource = new LogSource("MainLogSource", SourceLevels.All);
mainLogSource.Listeners.Add(logFileListener);
LogSource nonExistantLogSource = new LogSource("Empty");
IDictionary<string, LogSource> traceSources = new Dictionary<string, LogSource>();
traceSources.Add("Error", mainLogSource);
traceSources.Add("Debug", mainLogSource);
_writer = new LogWriterImpl
(
new Microsoft.Practices.EnterpriseLibrary.Logging.Filters.ILogFilter[0],
traceSources,
nonExistantLogSource,
nonExistantLogSource,
mainLogSource,
"Error",
false,
true
);
}
public static void Write(string message)
{
Write(message, "Error");
}
public static void Write(string message, string category)
{
LogEntry entry = new LogEntry();
entry.Categories.Add(category);
entry.Message = message;
_writer.Write(entry);
}
}
这个程序工作没有错误,但它不创建日志文件c:'messages.log,不写日志实体。错误在哪里?我不想在我的项目中使用应用程序配置文件
没有看到任何日志记录的原因(至少!):
-
配置为日志记录的类别是"错误"answers"调试",但当你调用
MyLogger.Write
时,你传递的是"我的类别" -
可能有权限问题。写入驱动器的根目录经常受到限制
LogWriterImpl
的引用存储为基类LogWriter
。
另外,与其直接使用日志类,不如使用作为5.0版本一部分发布的Fluent Configuration API。它使这种类型的配置更加简单。例如:
var builder = new ConfigurationSourceBuilder();
builder.ConfigureLogging()
.WithOptions
.DoNotRevertImpersonation()
.LogToCategoryNamed("My Category")
.SendTo.FlatFile("MyMessages")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Text Formatter")
.UsingTemplate("Timestamp: {timestamp}...{newline})}"))
.ToFile("c:''messages.log");
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current
= EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
它也更易于维护和支持。例如,当LogWriter
被抽象为版本5的一部分时,不破坏实现更改的可能性更小。