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,不写日志实体。错误在哪里?我不想在我的项目中使用应用程序配置文件

Enterprise Library 5.0:在没有XML配置的情况下将日志写入文件

没有看到任何日志记录的原因(至少!):

  1. 配置为日志记录的类别是"错误"answers"调试",但当你调用MyLogger.Write时,你传递的是"我的类别"

  2. 可能有权限问题。写入驱动器的根目录经常受到限制

作为题外话,您可能应该将对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的一部分时,不破坏实现更改的可能性更小。