NLog 可以提供这个功能。
请参阅 NLog Tutorial 进行安装和设置。
是否有最好的方法来记录所有方法调用,包括按需记录时间及其参数
您需要创建一个操作过滤器,它将提供请求所花费的时间。
ActionFilter:(您可能需要根据您的要求更改代码)
public class LogHttpRequestAttribute : ActionFilterAttribute
{
private static Logger _logger = LogManager.GetCurrentClassLogger();
public override void OnActionExecuting(HttpActionContext actionContext)
{
_logger.Info("action execution started");
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
_logger.Info("action execution finished");
}
Global.asax:
protected void Application_Start()
{
//Some code.
// Register global filter
GlobalFilters.Filters.Add(new LogHttpRequestAttribute());
}
您必须在 NLog.config 文件中为此过滤器添加一个目标。
<targets>
<target name="logfile" xsi:type="File" fileName="file.txt" />
</targets>
<rules>
<logger name="*.LogHttpRequestAttribute" writeTo="logfile" />
</rules>
上面给出的例子还远未完成,但我希望它能指引你正确的方向。
here 提供了许多有用的布局渲染器,请查找 Web、ASP.NET 和 ASP.NET Core 部分。
很少有用的是
- ${aspnet-mvc-action}
- ${aspnet-mvc-controller}
- ${aspnet-request-form}
- ${aspnet-request-querystring}
- ${aspnet-user-identity}
启用日志记录并获取日志以查看而不是调试应用程序。
要禁用日志记录,请将 rule 的 enabled 属性设置为 false 或 disable in code。
不仅是控制器方法,我喜欢记录调用中的所有方法。
您必须在每个要记录的类中为此创建一个静态变量。
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
然后使用此成员记录数据。
_logger.Info("data");
编辑:从任何方法登录。
using NLog;
public class DemoClass
{
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
public void DemoMethod()
{
try
{
//some code
_logger.Info("Some information");
}
catch (Exception ex)
{
_logger.Error(ex, $"Something went wrong");
throw;
}
}
}