Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TraceSource锁定文件_C#_.net_Tracesource - Fatal编程技术网

C# TraceSource锁定文件

C# TraceSource锁定文件,c#,.net,tracesource,C#,.net,Tracesource,我有一个班级的例子,它的寿命很长(几个小时到几个月)。它有一个将日志事件输出到文本文件C:\mylog.txt的方法。如下 public MyClass { private static System.Diagnostics.TraceSource traceSource = new System.Diagnostics.TraceSource("My.Source"); private static void MyMethod() { traceSou

我有一个班级的例子,它的寿命很长(几个小时到几个月)。它有一个将日志事件输出到文本文件
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得到的那种。我建议,基于流行的ApacheLog4Net库,但以.NET为中心。涵盖它。

也许您还可以从
.config
文件中显示相关设置?