3
このようなシナリオとします。このシナリオではASP.NETコアロギングを使用して遅延ログを記録する方法は?
[Route("api/test")]
public class TestController
{
private readonly ILogger<TestController> logger;
public TestController(ILogger<TestController> logger)
{
this.logger = logger;
}
[HttpPut]
public void Put(Guid id, [FromBody]FooModel model)
{
logger.LogInformation($"Putting {id}");
logger.LogTrace("Putting model {0}", Newtonsoft.Json.JsonConvert.SerializeObject(model));
try
{
// Omitted: actual PUT operation.
}
catch (Exception ex)
{
logger.LogError("Exception {0}", ex);
}
}
}
public class FooModel
{
string Bar { get; set; }
}
を、LogInformation
呼び出しがstring.Format
呼び出しをトリガーし、さらに悪いことになり、LogTrace
ラインに関係なくLogLevel
の、にSerializeObject
呼び出しをトリガーします。それはむしろ無駄に思える。
もっと怠惰なアプローチを可能にするLogging APIの場所はありますか?私が考えることができる唯一の回避策は、モデル上でToString
をオーバーライドして、非常に冗長な表現を作成し、JsonConvert.SerializeObject
をツールとしてスキップすることです。
は 'IsEnabled' http://dotnetliberty.com/を使用しての記事ですindex.php/2015/11/19/asp-net-5-why-use-ilogger-isenabled/ – Svek
これはあなたが探しているものではない場合でも、主なスレッドは遅れを取得するには? – Svek
ああ、いいえ、記事と@ meziantouの答えは私が欲しいものだと思っていますが、私はそれがどこでも繰り返されることを防ぐ方法をまだ考えています。基本的に私は探していました。私が 'Logger.IsEnabled(...)'と 'Logger.LogTrace(...)'呼び出しを組み合わせることができるAPIのものです。 – Jeroen