写入日志文件类

时间:2011-11-22 18:44:04

标签: c# logging

我只是想知道写日志的好方法。

我创建了一个单例类Logger,它有两个方法:Write(eventDate,messageType,message) 和Dispose().

在构造函数中,我创建StreamWriter(AutoFlush设置为true),用于在Write方法中追加行。日志记录被广泛使用(但在一个线程中),每秒大约10-15条记录。

现在我反思以下两个问题,我期待你的评论:)

首先是autoflushing - 它是否一直打开和关闭文件? File.AppendText是否相似?

其次,在Dispose中我刷新StreamWriter,然后在其上调用Dispose。如果没有调用Dispose怎么办?我怎样才能确定它会被处理掉?因为如果我删除AutoFlush并且会不时刷新流(可能是通过维护内部计数器)并且当n个记录被写入缓冲区时,我会刷新它,但是如果写入少于n条记录并且程序终止呢? / p>

2 个答案:

答案 0 :(得分:5)

是否有任何理由不能使用NLog等开源日志记录框架?

设置为write to a file

非常简单

这是将第一个日志写入文件的一种非常简单的方法:

  1. 右键单击引用
  2. 点击Manage NuGet References
  3. 确保选中左侧的“在线”标签,然后搜索“NLog”
  4. 安装“Nll Schema for Intellisense(TM)”(这将自动安装xml NLog.config和xsd文件以获取xml intellisense支持并提取NLog所需的引用)NLog Schema for Intellisense(TM)
  5. 打开自动创建的NLog.config文件并取消注释示例目标和规则,它们应如下所示:

           

    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    

        

    <logger name="*" minlevel="Trace" writeTo="f" />
    

  6. 现在你已经准备好记录东西了,每当你记录一些东西时都会使用示例配置将它附加到运行可执行文件的/ logs目录下的{shortdate} .log文件中,所以如果你做了类似的事情:
    var logger = NLog.LogManager.GetLogger("SampleLogger");
    logger.Trace("Logged Trace");
    logger.Debug("Logged Debug");
    logger.Info("Logged Info");
    logger.Warn("Logged Warn");
    logger.Error("Logged Error");
    logger.Fatal("Logged Fatal");
    
  7. 你会得到这个日志文件

    NLog File

答案 1 :(得分:1)

  1. 自动打开/代码“刷新”...但Autoflush不会“关闭/打开”。

  2. 理论上,你甚至不需要“Dispose”(毕竟这个托管代码)。 你需要在某处调用“Close()”。

  3. 如果程序正常关闭,它应自动刷新并关闭 - 应写入所有数据。

    如果程序异常终止 - 所有投注都将关闭,以确定将会发生什么或不会发生什么。您所知道的是您的资源将被释放 - 但您的数据可能会或可能不会被写入(并且数据文件可能会也可能不会被破坏)。

  4. '希望有所帮助......