3

C# Win フォーム内で NLog ライブラリ (http://nlog-project.org/) を使用してログを記録します。この NLogger を使用してログファイルを「IsolatedStorage」に書き込むことができる場合、経験のある人はいますか?

Thx 4つの答え

4

1 に答える 1

4

Silverlight で NLog を使用したことはありませんが、新しいバージョン 2.0 がベータ版としてリリースされたばかりで、Silverlight で使用できます (Web サイトにいくつかの例があります)。分離ストレージ ターゲットは見たことがありませんが、作成するのは難しくないと思います。

このリンクは、(クリスチャンの回答で)分離ストレージに「ログ」する1つの方法を示しています。それが良いアイデアかどうかについてはコメントできません。その情報を使用して、NLog ロガーが分離ストレージに書き込むことができるように、NLog に構成できる NLog ターゲットをおそらく書き込むことができます。

分離ストレージへのログ記録の別の例(Chris S による回答) を次に示します。

最後に、NLog 2.0 には、Silverlight クライアントから使用できると思われる LogReceiveService と LogReceiverServiceTarget が付属しています。私はそうしていないので、それらが機能するかどうか、またはどのように機能するかについてコメントすることはできません.

クリスチャンの例では、次のようなことができます(私はこれを試していません):

[Target("IsolatedStorage")]
public sealed class IsolatedStorageTarget : TargetWithLayout    
{        
  public IsolatedStorageTarget()
  {            
  }
  protected override void Write(LogEventInfo logEvent)        
  {
    try 
    { 
      using (IsolatedStorageFile store = 
             IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
        using (Stream stream = new IsolatedStorageFileStream
               ("Solution.Silverlight.log", FileMode.Append, FileAccess.Write, store)) 
        { 
          StreamWriter writer = new StreamWriter(stream); 
          writer.WriteLine(this.Layout.Render(logEvent));
        } 
        writer.Close(); 
      } 
    } 
    catch (Exception ex) 
    { 
    } 
  }
}

これを改善する可能性があると私が考えることができるいくつかのことは次のとおりです。

ターゲットが生きている限り、ストリームとファイルを開いたままにしておく方がよいかもしれません。おそらく、InitializeTarget と CloseTarget をオーバーライドすることでこれを行うことができます。

ハードコードされたファイル名を使用するのではなく、ファイル名を指定できるようにした方がいいかもしれません。

いくつかのエラー処理が役立つ場合があります。少なくとも、分離ストレージが使い果たされたかどうかを検出し、正常に (またはサイレントに) 失敗する可能性があります。

この道を行くなら、Good Luck! 成功したか失敗したかを報告します。

于 2010-10-26T21:22:20.470 に答える