2011-10-25 57 views
1

文件中有一個記錄到文件中的一些代碼。我不使用的app.config企業庫5.0:寫日誌,沒有XML配置

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,不寫日誌的實體。錯誤在哪裏?我不想使用應用程序配置文件在我的項目

回答

3

可能有幾個原因(至少!)爲什麼你沒有看到任何記錄:被配置用於記錄

  1. 類別是「錯誤」和「調試」,但當您撥打MyLogger.Write時,您傳遞的是「我的類別」類別

  2. 可能存在權限問題。寫入驅動器的根經常限制

順便說一句,你應該存儲作爲基類LogWriter引用LogWriterImpl

作爲另一一邊,而不是使用日誌類直接優選use the Fluent Configuration API將其釋放的5.0版本的一部分。它使這種配置更簡單。舉個例子:

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.

+0

它的工作原理與良好的代碼:** Logger.Write(「這是錯誤消息」,「我的類別」);** – NieAR

相關問題