【发布时间】:2016-06-27 07:13:18
【问题描述】:
我刚刚继承了 C# 中非常糟糕的 Web API 代码。我需要改进它,但我不知道从哪里开始。有很多类,代码是一场噩梦。我也认为部分代码从未使用过。
我想计算每个请求被调用的次数以及每个请求的持续时间。我想将我的所有结果记录在一个表中。在一两天内,我可以清楚地了解我最常用的东西和需要时间的东西。客户对此抱怨。
我使用 Nlog 记录日志和一个简单的秒表来计算性能。你有什么建议?我知道最好使用过滤器和属性进行跟踪,但我怎样才能像这样记录和跟踪性能?
// GET api/Item/5
public Item GetItem(string id)
{
// I don't use string.Format in my real code. This is just for this example.
logger.Trace(string.Format("Request: GET api/Item/{0}", id));
Stopwatch sw = new Stopwatch();
sw.Start();
Item item = context.Items.Single(i => i.Code == id);
sw.Stop();
logger.Trace(string.Format("Response: GET api/values/{0}\r\nElpased={1}\r\rn{2}", id, sw.Elapsed, response));
我在这里找到了以前的信息
感谢
http://weblogs.asp.net/fredriknormen/log-message-request-and-response-in-asp-net-webapi
Exact time measurement for performance testing
当然,所有这些跟踪和性能作业都将从我的配置文件中激活或停用。对于 NLog,它是内置的。对于秒表,我计划构建一些东西。我不打算在生产中一直保持这个状态
【问题讨论】:
-
Resharper 在这里帮不上忙。 Resharper 无法在运行时检测到未使用的请求。
-
属性基础记录检查这个stackoverflow.com/questions/13655541/…
-
好的,请阅读我的问题 Offir Pe'er。这是关于编写代码,而不是使用工具。
-
由于控制器是根据请求创建的,您可以创建一个主控制器,它在其构造函数中启动日志记录并在解构函数中完成它。然后你不必在每个方法中添加登录代码,仍然可以查看大修性能。
-
@Prathyush 这是我迷路的地方。我阅读的每篇文章都提出了不同的方法。使用 ActionFilter,现在使用 IOperationInvoker,使用 DelegatingHandler,... 说真的,我仍然更喜欢在每个方法的开头和结尾手动编写日志。
标签: c# asp.net-web-api nlog