我有一个很长时间(小时到几个月)的类实例。它有一个将日志事件输出到文本文件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.");
}
}或者是否有一个特定的原因,为什么它必须声明为静态?我做错了什么吗?文件锁定是预期/必需的行为吗?
发布于 2015-03-30 10:38:01
你看错了铁轨上的这个问题。TraceSource不确定跟踪数据是如何记录的。这是由.NET中的另一个类TraceListener完成的。两者之间的划分很重要,跟踪源只是一个有趣的跟踪信息来源,侦听器决定如何对其进行过滤,以获取不太重要的信息以及如何记录它。
从您如何配置侦听器的问题上看不出任何见解。使用.config文件是一种常见的方法。
你需要一个不同类型的倾听者。一个非常简单的方法是在需要记录跟踪事件时打开日志文件,并在写入字符串后立即再次关闭它。这使您有机会删除该文件,尽管您仍然必须在正确的时间做它。然而,这并不是正确的方法,它是非常低效的。
一个常见的解决方案是一个“滚动的附录”,它是一个监听器,可以将信息记录到一个文件中,但确保它不会变得太大。然后切换到另一个文件,删除非常旧的文件,这样就不会得到太多的文件。不是你想自己写的那种代码,它很容易从库中获得。你能通过Nuget的那种。我推荐NLog,基于流行的Log4Net库,但更多地以.NET为中心。这个问题会报道它。
https://stackoverflow.com/questions/29306243
复制相似问题