gpt4 book ai didi

c# - TraceSource 锁定文件

转载 作者:太空狗 更新时间:2023-10-30 00:51:10 25 4
gpt4 key购买 nike

我有一个存在时间很长(几小时到几个月)的类实例。它具有将日志事件输出到文本文件 C:\mylog.txt 的方法。如下

public MyClass
{
private static System.Diagnostics.TraceSource traceSource = new System.Diagnostics.TraceSource("My.Source");

private static void MyMethod()
{
traceSource.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "MyMethod called.");
}
}

C:\mylog.txt 可能会变得很大,我想删除它。但是我无法删除该文件,大概是因为它被 traceSource 锁定了(通过终止进程我可以删除该文件)。

System.Diagnostics.TraceSource 的所有示例都将其实例声明为上面的静态类成员。鉴于我的情况,是否可以在下面的方法中初始化它?

public MyClass
{
private static void MyMethod()
{
var traceSource = new System.Diagnostics.TraceSource("My.Source");
traceSource.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "MyMethod called.");
}
}

或者是否有必须声明为静态的特定原因?难道我做错了什么?文件锁定是预期/必需的行为吗?

最佳答案

对于这个问题,您正在查看铁轨的错误一侧。 TraceSource 不确定如何记录跟踪数据。这是由 .NET 中的 另一个 类 TraceListener 完成的。两者之间的区别很重要,跟踪源只是一个有趣的跟踪信息源,监听器确切地决定了如何过滤不太重要的信息以及如何记录它。

从您如何配置监听器的问题中没有任何见解。使用 .config 文件是一种常见的方式。

您需要不同类型的听众。一个非常简单的方法是在需要记录跟踪事件时打开日志文件,并在写入字符串后立即再次关闭它。这使您有机会删除文件,尽管您仍然必须在正确的时间执行此操作。然而,这不是正确的方法,效率非常低。

一个常见的解决方案是“滚动附加程序”,这是一个将日志信息记录到文件中但确保它不会变得太大的监听器。然后切换到另一个文件并删除非常旧的文件,这样你就不会得到太多。这不是您想要自己编写的代码,它很容易从库中获得。你可以通过Nuget获得的那种。我推荐 NLog ,基于流行的 Apache Log4Net 库,但更加以 .NET 为中心。 This question覆盖它。

关于c# - TraceSource 锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com