首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TraceSource锁定文件

TraceSource锁定文件
EN

Stack Overflow用户
提问于 2015-03-27 17:05:28
回答 1查看 840关注 0票数 4

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

代码语言:javascript
复制
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的所有示例都将其实例声明为静态类成员。根据我的情况,在下面的方法中初始化它是可以接受的吗?

代码语言:javascript
复制
public MyClass
{
    private static void MyMethod()
    {
        var traceSource = new System.Diagnostics.TraceSource("My.Source");
        traceSource.TraceEvent(System.Diagnostics.TraceEventType.Information, 0, "MyMethod called.");
    }
}

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-30 10:38:01

你看错了铁轨上的这个问题。TraceSource不确定跟踪数据是如何记录的。这是由.NET中的另一个类TraceListener完成的。两者之间的划分很重要,跟踪源只是一个有趣的跟踪信息来源,侦听器决定如何对其进行过滤,以获取不太重要的信息以及如何记录它。

从您如何配置侦听器的问题上看不出任何见解。使用.config文件是一种常见的方法。

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29306243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档