1

パラメータを持つログメソッドを持つロギングクラスがあります。

public void LogTrace(String message, params object[] parameters)
{
  ..
  .. String.Format(message, Parameters);

LogTrace が params なしで呼び出されたときに何をするかについての .NET 規則/期待は何でしょうか? 例えば

LogTrace("This is a {poorly written} log message");

また

LogTrace("This is {0} log message");

具体的には、これが例外をスローすることを期待しますか、それともプレーンテキストをそのままログに記録することを期待しますか? 最初のケースでは、プレーン テキストをログに記録するだけで「いい」ように見えますが、2 番目のケースでは、実際にパラメーターを忘れたことを示している可能性があります。

概念的には、プレーン テキストをログに記録する関数と、フォーマットされたメッセージをログに記録する関数の 2 つの異なる関数があるようです。それで、おそらく2つの別々の方法が必要ですか?

4

3 に答える 3

1

string.Formatパラメータが必要であり、それらを提供しない場合、例外がスローされます。message正しくフォーマットされていない場合、例外がスローされます-括弧の間にゴミがあります。空のパラメーターリストを防ぐことができます

public void LogTrace(String message, params object[] parameters)
{
    if(parameters != null && parameters.Length > 0)
        var s = String.Format(message, Parameters);
    else
        var s = message;
    // do something with s
}

パラメーターの数が に対応していない場合でも問題は発生しますがmessage、問題をマスクしてあいまいなメッセージをログに記録するのではなく、例外をスローさせます。

于 2013-10-23T23:24:55.463 に答える
1

2つの方法で問題ないと思います(本当に必要な場合):

LogTrace(message, params) {
    // just don't catch exceptions from String.Format method, so It 
    // is possible to throw FormatException or ArgumentNullException
}

LogTrace(message) {
    // place a plain text, e.g. This is {0} log.
}

これは分かりやすく使いやすいと思います。

  • パラメータがない場合は、メッセージが何らかの方法でフォーマットされることを期待しないでください。

  • パラメーターを持つメソッドを使用する場合は、そこに null オブジェクトを配置する必要がなく、メッセージとパラメーターが相互に機能することを期待する必要があります。コードにエラーが発生した場合は、.NET フレームワークが実装されているため、標準の動作が期待されます: http://msdn.microsoft.com/pl-pl/library/system.string.format.aspx#Format_Exceptions

于 2013-10-23T23:26:12.470 に答える
1
  • String.Format("This is a {0} {1} log message", "poorly");スローします(1つのパラメーターが少なすぎます)
  • これは良いことです。これは、関連する機能のロギング部分にエラーがあったことを意味します。これは、ロガーによって記録される必要があります。
  • try-catch-looping に常に 1 つのパラメーター (例: "[undefined]") を渡すことで、これを回避できます (元のメッセージを可能な限り適切に生成できます)。これはログに記録されますThis is a poorly [undefined] log message。これを無限ループにしないでください!
于 2013-10-23T23:24:08.437 に答える