是否有任何理由从 .NET MVC 生产应用程序中删除 System.Diagnostic.Trace 调用?

Is There Any Reason to Remove System.Diagnostic.Trace Calls from a .NET MVC Production Application?

我希望这不是一个愚蠢的问题,但我正在编写一个 .NET MVC 应用程序并且我打算在开发过程中大量使用 System.Diagnostics。如果是这样,我将在应用程序投入生产后将所有这些调用(主要是 Trace.WriteLine)保留在应用程序中。

是否有任何理由(性能、安全性等)不在应用程序中留下 System.Diagnostics 调用?也许是那个图书馆的某些部分?我听说对于某些库(例如使用反射的库),您必须小心使用它,因为您可能会使您的应用程序暴露于某些类型的攻击。

任何关于我应该注意什么的想法都会有所帮助(如果有的话)。

所有调用都使用 CPU 和内存。

您不需要从您的代码中删除它,您可以禁用 System.Diagnostics.Trace 调用进行编译。

System.Diagnostics.Trace 是条件属性。

https://msdn.microsoft.com/en-us/library/system.diagnostics.Trace.aspx:

In Visual Studio projects, by default, the "DEBUG" conditional compilation symbol is defined for debug builds, and the "TRACE" symbol is defined for both debug and release builds. For information about how to disable this behavior, see the Visual Studio documentation.

如何禁用:

Compilers that support ConditionalAttribute ignore calls to these methods unless "TRACE" is defined as a conditional compilation symbol. To define the "TRACE" conditional compilation symbol in C#, add the /d:TRACE option to the compiler command line when you compile your code using a command line, or add #define TRACE to the top of your file. In Visual Basic, add the /d:TRACE=True option to the compiler command line or add #Const TRACE=True to the file.

很高兴为您提供帮助!

在其中留下任何不必要的代码可能会产生影响。首先想到的是性能。如果这些诊断调用耗尽了系统资源,即使只是一点点,也会产生影响。它可能会导致更长的 运行 次等

您已经介绍的第二部分是安全性。任何时候公开代码的内部部分时,都存在被利用的可能性。这可能是次要的,但越严格越好安全...

如果您可以轻松删除 Diagnostic/development 代码,我建议您这样做,然后在部署到生产环境之前再次测试。

这就是您应该研究 ETW and use Eventsource calls for logging 的原因。

[Event(2, Level = EventLevel.Error)]
public void TaskCreate(long TaskId) 
{ 
    if (IsEnabled()) 
       WriteEvent(2, TaskId); 
}

此演示事件表明,只有当活动侦听器正在侦听 ETW 提供程序的事件时,它才会被触发。因此 ONLY 如果您使用 Perfview or Windows Performance Recorder (which is part of the WPT/Windows SDK) 捕获跟踪,则会写入事件。否则,事件永远不会引发。