2011-10-25 14 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への参照を格納する必要があります。別として

さておき、代わりロギングクラスを使用する直接、バージョン5.0の一部としてリリースされたuse the 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); 

さらにメンテナンスとサポートが可能です。例えば。 「私、** Logger.Write(「これはエラーメッセージです」:LogWriterは、バージョンの一部として抽象なされたときのような実装の変更を壊すがないこと少ないチャンスは5

+0

それは、このコードで良い作品がありますカテゴリー");** – NieAR

関連する問題