问题标签 [tracelistener]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2660 浏览

c# - 获取 Console.WriteLine 的事件挂钩

Console.WriteLine在 ac# 控制台应用程序中,有没有办法在通过和将文本写入控制台时获得通知Console.Write

每当此事件触发时,应该可以执行一些操作,例如在写入之前更改文本、将其重定向到文件或更改当前的 Console.ForegroundColor。

我知道实现此目的的一种简单方法是永远不要Console.WriteLine直接调用,而是始终调用我自己的自定义包装器方法。

另一种更好的方法是编写一个自定义的ConsoleTraceListener,并通过输出所有文本trace.TraceInformation()。我已经做到了,而且效果很好。

但是,如果 Console.WriteLine 调用位于另一个应保持不变的程序集中,则此方法不起作用。

那么有没有办法在Console.WriteLine不修改进行这些调用的代码的情况下对调用做出反应?

0 投票
2 回答
507 浏览

c# - 在 Config 中指定条件跟踪侦听器

我想在我的代码中进行如下调用:

System.Diagnostics.Trace.WriteLine("Starting XYZ...");

并将其写入配置中描述的文件:

<system.diagnostics> <trace autoflush="true"> <listeners> <add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter" initializeData="trace.log" /> </listeners> </trace> </system.diagnostics>

这很好用,除了现有的调用WriteLine()与我添加的新代码行混在一起。

如何将我的跟踪写入一个日志文件并保留现有的跟踪(在我修改之前根本没有配置,我希望现有的跟踪按照当前的方式处理)。

我知道这可以通过代码实现,但我想在配置文件中指定文件并有条件地写入它。

0 投票
0 回答
1480 浏览

tracelistener - 在 app.config 中动态设置日志文件名

我正在编写一个简单的应用程序,我在 app.config 中定义我的跟踪侦听器。已将其定义如下。

目的是让每次运行应用程序时日志/跟踪文件都不同。但是,当我尝试使用 trace.writeline 方法写入跟踪侦听器时,出现以下异常。{“不支持给定路径的格式。”}我在这里做错了什么?我怎样才能做到这一点?

0 投票
3 回答
1946 浏览

c# - XMLWriterTraceListener 生成文本墙而不是格式化的 XML

我已经像这样将一个XMLWriterTraceListener对象添加到我的跟踪侦听器中,

它成功地接收到来自 Trace.WriteLine()、Trace.TraceInformation() 等的消息。唯一的问题是它正在写入的 Trace.xml 文件不可读,因为它不包含换行符或缩进。我是否遗漏了一个中间步骤(XMLStreamWriter?)来完善输出?

当前输出显示:

但我希望它阅读:

0 投票
1 回答
584 浏览

c# - 关闭/重新打开使用 XML 配置创建的 TraceListener,指向外部 USB 记忆棒

我有一个TraceListener对象,用于记录,在 app.config 中创建,指向 USB 记忆棒上的一个位置。

我收到一条IOException消息

文件的卷已被外部更改,因此打开的文件不再有效。

Trace.WriteLine()在我移除设备然后将其重新插入后尝试时。我知道它正在发生,因为当我拔下它时,跟踪侦听器所拥有的打开文件的句柄无效。

我已经设法IOException通过调用Close()TraceListener 来阻止 s,但我无法弄清楚如何再次重新打开同一个文件的句柄。方法的 MSDN 文档TextWriterTraceListener.Close()

在调用 Close 后调用 Write 或 WriteLine 方法会自动重新打开流。

但它只是没有这样做。关闭流后,我没有得到进一步的输出。

编辑:

更多信息

我发现跟踪侦听器只有在我调用 后Close()尝试在拔下驱动器时写入时才无法再次写入。如果我在拔下驱动器时不写,然后再次插入驱动器并尝试写,一切正常。我还验证了我的Trace.Listeners收藏仍然包含我的听众。

0 投票
1 回答
504 浏览

system.diagnostics - TraceSource 和 TraceListener 悄悄地什么都不做

当 System.Diagnostics 跟踪完全没有做任何事情时,如何对其进行故障排除?

0 投票
0 回答
825 浏览

c# - 跟踪在 Asp.net MVC 5 站点中不起作用

我有一个自定义跟踪侦听器(继承 TraceListener)设置,可将跟踪信息记录到数据库中。

这在我的开发机器上运行良好,但在生产机器上,我无法让任何跟踪消息显示在数据库上。我的猜测是,这可能是 iis 配置问题。我已经测试了与errorTrace数据库的连接,我可以成功查询和显示信息。

我环顾四周,找不到任何与此行为相关的信息。另外,我的生产机器使用的是 iis 7.5。

更新:我正在使用 Windows 身份验证。我的生产机器和开发机器都连接到同一个域。另外,我的开发机器是 iis8.5,生产机器是 iis7.5,但这不应该是问题。

0 投票
2 回答
1875 浏览

c# - 为 App.config 中的所有 TraceSource 添加默认 TraceListener

如何在 net 4.0 c# 项目中定义一个默认的 TraceListener,它会自动添加到所有 TraceSources 中?

目前我必须列出我在 App.config 文件中使用的每个命名 TraceSource,如下所示:

除非另有说明,否则我正在使用应接收来自所有 TraceSource 的所有输出的 SharedListener。使用上述语法,这需要为每个 TraceSource 手动输入。

每当我引入一个带有新 TraceSource 的新类时,我都必须更新 App.Config。如果多个程序使用该程序集,我必须更新多个 App.Config。更新这些条目时的拼写错误不会产生任何错误,它只会默默地忽略来自正确源的所有跟踪输出。

有没有办法可以通过 App.config 设置默认的 TraceListener,这样如果我想偏离默认值,我只需要命名特定的 TraceSources?

0 投票
1 回答
200 浏览

c# - 使用从另一个项目引用中引用的 tracelistener 引用

我有一个项目结构,我们有一个引用的项目(这里称为 RefProject)来进行我们的日志记录。因此,我在该 RefProject 中调用了一个方法,它对 Enterprise Library 进行了 WriteLog 调用,并且在现有的 Enterprise Library 跟踪监听器中一切正常。从 RefProject 项目中引用了所有企业库 dll。一切正常,配置在 web 项目(这里称为 WebProject)的 web.config 中完成(WebProject 引用 RefProject,但不引用 EntLib dll)。

这是在 web.config. 中配置的标准侦听器的示例。

现在,我在一个单独的日志项目(这里称为日志项目)中创建了一个自定义跟踪侦听器。如果 WebProject 引用 Logging 项目,那么一切正常,并且跟踪侦听器按预期工作。如果 RefProject 引用 Logging 项目,那么当它尝试写入日志文件时会出现异常,说它找不到类型。

理想情况下,我不希望所有客户端应用程序都需要保留此引用。我希望这一切都由 RefProject 处理。RefProject 已经使用其他 EntLib 默认侦听器处理了这个问题。当所有其他 EntLib 组件都由 RefProject 而不是 WebProject 直接引用时,我不明白为什么 WebProject 需要让这个新项目引用记录器。

有任何想法吗?

0 投票
0 回答
531 浏览

.net - System.Diagnostic.Trace.WriteLine 侦听器,每个线程

我有一个 Windows 服务,它执行多个线程来处理事情。

同时,我使用 Trace 监听器来收集一些日志信息。一切正常。但主要问题是,日志信息(trace.writeline)在所有线程之间共享。因此,如果某些内容写在一个线程中,那么当时运行的所有线程都可以看到并收集它。

有没有一种方法可以限制跟踪侦听器仅侦听当前线程而不是其兄弟线程?

在 Visual Studio 2008 上使用 .NET 框架 3.5

谢谢萨默斯