写入日志文件类

Nic*_*eon 3 c# logging

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

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

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

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

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

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

Jon*_*son 5

你有什么理由不能使用像NLog这样的开源日志框架吗?

设置写入文件非常容易

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

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

    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    
    Run Code Online (Sandbox Code Playgroud)

    <logger name="*" minlevel="Trace" writeTo="f" />
    
    Run Code Online (Sandbox Code Playgroud)

  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");
    

你会得到这个日志文件

NLog文件

  • 原因是我花了大约10分钟来编写我的日志记录类,它在需求方面非常原始 - 只需编写文本日志文件.学习如何设置第三方组件有时可能需要更长的时间.他们说log4net使用起来非常简单.我没有发现那么容易(不是在10分钟内).第二个原因是,通过提出这个问题,我学到了一些新东西.只是想知道性能问题.我会检查NLog.谢谢 (2认同)