- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 TraceSource 对象,用于记录 VB.Net 应用程序的初始化。它附加了几个 TraceListeners:
SourceName TraceEventType: Id :
If _buffer.EventType = TraceEventType.Verbose Then
For Each listener As TraceListener In _traceSource.Listeners
listener.Write(_buffer.Text)
Next
Else
_traceSource.TraceEvent(_buffer.EventType, id, _buffer.Text)
End If
Bootstrapper Warning: 0 : Failed to validate assembly
For Each listener As TraceListener In _traceSource.Listeners
If listener.GetType Is GetType(ConsoleTraceListener) OrElse listener.GetType Is GetType(TextWriterTraceListener) Then
listener.Write(_buffer.Text)
Else
listener.TraceEvent(Nothing, _traceSource.Name, _buffer.EventType, id, _buffer.Text)
End If
Next
Important: This method is not intended to be called directly by application code but by members of the Debug, Trace, and TraceSource classes to write trace data to output.
最佳答案
另一个具有您可以使用的可格式化监听器的类似项目是 Essential Diagnostics ,这实际上最初是受到 Ukadc.Diagnostics 的启发。
但是,您已经表明您不想要外部依赖项,但您仍然有多种选择,无需重新编写框架的某些部分:
(一种)
.NET Framework 中设计的扩展点不是重写 TraceSource,而是编写您自己的 TraceListener。
如果您编写自己的跟踪监听器“ConsoleWithoutPrefixListener”和“FileWithoutPrefixListener”,那么您可以覆盖 TraceEvent() 方法以仅将消息转发到 TraceWrite()(并删除前缀)。
事实上,ConsoleTraceListener 或 TextWriterTraceListener 都不是密封的,所以我认为你可以从它们继承并使用 TraceEvent() 方法(加上构造函数)的一行覆盖来实现它。
(二)
另一种选择是保留针对源配置的 EventLogTraceListener,但在(而不是跟踪源)下配置其他两个监听器。
这样做的缺点是在您的代码中,您每次都需要记录两次,例如:
_traceSource.TraceEvent(_buffer.EventType, id, _buffer.Text)
Trace.TraceWrite(_buffer.Text)
如果您想编写一些带有前缀的消息而一些不带前缀的消息,那么您将需要两个跟踪源:一个配置了所有三个监听器,一个仅配置了事件日志监听器。
然后,在您的包装器中写入源 A(所有三个)或源 B + Trace 静态方法。
(C)
就我个人而言,我的指导是不要使用跟踪来写入事件日志——如果问题足够重要以写入事件日志,您通常不希望用户能够通过配置将它们关闭。
在这种情况下,您的包装器直接写入事件日志(EventLog.WriteEntry 或其他),然后您的代码写入文件和控制台的跟踪源和/或跟踪静态方法。
请注意,要正确写入事件日志,您需要考虑权限。要创建事件日志源,您需要以管理员身份运行。作为开发人员,您通常可能拥有管理员权限,因此您需要在没有管理员权限的情况下正确测试。
另请注意,只有初始创建需要管理员权限,并且这会在您编写第一条消息时自动完成,因此如果您已经以开发人员管理员身份完成此操作,则需要找到一台干净的机器进行测试。
因此,通常您需要将 EventLogInstaller 作为代码的一部分,它由 InstallUtil(或等效的 MSI 或其他)运行,在安装期间创建事件日志源(因为安装是由管理员完成的)。然后,当程序运行时源存在。
那么,这与写入跟踪有什么关系——好吧,如果你唯一要做的就是在你的配置中配置 EventLogTraceListener 那么对于普通用户来说它不会工作;它将尝试将事件写入源(在 initializeData 属性中),然后将尝试创建源,如果不以管理员身份运行将失败。
如果您确实为事件源添加了安装程序,那么如果有人更改了配置文件,您仍然会遇到问题。
因此,我建议直接在代码中创建 EventLogInstaller 和 EventLog,以确保名称匹配,而不是通过跟踪基础结构。
关于.Net:如何抑制 TraceSource header ("SourceName TraceEventType: Id : ")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062277/
当使用 System.Diagnostics TraceSource 进行日志记录/跟踪时,使用 TraceSource.TraceTransfer 和 TraceSource.TraceEvent(
我有一个存在时间很长(几小时到几个月)的类实例。它具有将日志事件输出到文本文件 C:\mylog.txt 的方法。如下 public MyClass { private static Syst
如果一个应用程序将其所有事件数据写入一个日志文件,那么拥有多个 TraceSource 有什么用处?我只是对代码中需要多个 TraceSource 的用例感到好奇。 最佳答案 有关使用 TraceSo
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
在跟踪到 TraceSource 之前,是否应该在发出跟踪本身之前检查“跟踪级别”? var ts = new TraceSource("foo"); ts.Switch.Level = Source
msdn:“此类型的任何公共(public)静态(在 Visual Basic 中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”它只包含实例方法。 我应该如何以所有事件通过 TextW
伙计们,我想我已经失去理智了。根据 MSDN,TraceSource 是线程安全的。所以我有一个简单的控制台应用程序。在其中,我声明; private static readonly TraceSou
我在我的应用程序中使用记录器来写入文件。源、开关和监听器已在 app.config 文件中定义如下:
我遇到了一个情况,不知道能不能解决。 我已经开始向我的多线程服务添加 TraceSource 和跟踪语句,但我在处理代码中的跟踪方法的线程中遇到了锁。这会导致整个应用挂起。 我的服务配置为在控制台窗口
我尝试使用两种不同的日志级别设置 MySource 跟踪源。 FileLog 应跟踪所有内容(详细),系统事件日志应仅跟踪错误。 以下设置似乎已终止记录到 FileLog。我做错了什么?
我正在尝试在我们的应用程序中采用 Common.Logging,但是我在使用 system.diagnostics 设置它时遇到了一些问题。它适用于直接 Trace,但不适用于 TraceSource
我是 .net 跟踪的新手。 我的应用程序中有近 10 到 15 个跟踪源,共享监听器列表中有文本文件监听器和 sql server 监听器。我的问题是如果我打电话 traceSource.Trac
所以我使用 Tracesource 来记录一些错误并且不想在用户本地 Windows 文档结构中创建日志文件(类似于 System.Environment.SpecialFolder.LocalApp
我对 TraceSource.TraceEvent() 的调用有时不会写入 Azure 诊断日志。 public class WorkerRole : RoleEntryPoint { pri
这是我的 Winforms 应用程序的配置文件。目前它已将 MyTraceSource 注释掉,如果我取消注释并运行我的程序,它会按预期工作。我从我引用的库中获取输出到我的控制台。 MyTraceSo
以下代码: static void Main(string[] args) { TraceSource ts = new TraceSource("MyApplication"); t
TraceSource 类的 MSDN 文档有一个示例,说明 app.config 文件如何列出 TraceSource 实例的信息: http://msdn.microsoft.com/en-us/
我试图让我的跟踪输出出现在 Glimpse 的跟踪选项卡中;我正在使用 TraceSource 将我当前的跟踪输出到一个文件,代码如下: public static void TraceEve
我正在使用 .NET WebAPI 在 C# 中开发 Web 服务,我想将每个请求的多个事件记录到 Windows 事件日志中。由于该服务在多线程模型中运行并且每秒将接收数百个请求,因此我需要能够按请
我正在着手发布几个库,并计划使用 TraceSource 在其中实现一些诊断跟踪。我还希望允许用户附加/配置他们自己的监听器、开关、过滤器等。 由于库不附带配置文件,是否有任何现有模式可以巧妙地完成此
我是一名优秀的程序员,十分优秀!