我使用的是WebApi 2.2并安装了 WebApi 2.2 Tracing 包。
在我的 WebApiConfig.Register 方法中,我添加了这一行:
config.EnableSystemDiagnosticsTracing();
我想在我的操作方法中向 trace.axd 写出一些信息,就像我以前用ASP.NET webform做的那样。
类似的东西:
[Route("getCurrentUser")]
[HttpPost]
public IHttpActionResult GetCurrentUser()
{
Trace.WriteLine("GetCurrentUser"); // doesn't work
Configuration.Services.GetTraceWriter().Warn(
Request, "AccountController", "GetCurrentUser"); // doesn't work either
}
但是我没有在trace.axd中看到任何内容。
我确实看到了视觉工作室中记录的信息,当我调试它时,但它写出了太多我不需要的信息。
我真正想要的只是看到我在我的动作方法中专门写的跟踪信息。
谢谢!
答案 0 :(得分:0)
启用该功能后,它会创建SystemDiagnosticsTraceWriter类的新实例。默认的TraceLevel是Info,因此你的Warn应该可以工作。
默认情况下,SystemDiagnosticsTraceWriter将跟踪写入System.Diagnostics.Trace,它们将在Visual Studio的“输出”窗口中编写。所以你应该注册额外的Trace Listeners。
您应该在Web配置中将其配置到何处将跟踪逻辑写入?
我猜测Trace.axd是ASP.NET Trace Viewer并且与ASP.NET Pages一起使用。不确定它是否可以与Web API一起使用。
但您可以配置不同的跟踪侦听器,例如到事件日志或控制台,或文件或自定义跟踪编写器:
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="eventLogListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="TraceListenerLog" />
<add name="logFileListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="E:\CompressedLogs\Service1-WebApi-TraceOutput.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
答案 1 :(得分:0)
很棒的问题,我选择了一个Web API跟踪组件,第一个想到的是ASP.NET跟踪,因为它很容易启用/禁用和保护。没有必要安装额外的包; ASP.NET Trace可以通过 System.Web.HttpContext.Current 使用:
using System.Web;
...
catch(Exception e)
{
HttpContext.Current.Trace.Warn("MyWebAPI", string.Format("[ERROR] {0}", e));
}
请记住在web.config中启用跟踪:
<trace enabled="true" pageOutput="false" localOnly="true" requestLimit="200" />
我离开使用pageOutput="false" localOnly="true"
因为我认为它是最安全的跟踪配置(除了被禁用;-):页面上没有跟踪输出,并且跟踪可以是仅由服务器上运行的浏览器查看。
如果您需要查看生产环境中的痕迹,请记得在使用后将其关闭。