我只是想知道写日志的好方法。
我创建了一个单例类Logger,它有两个方法:Write(eventDate,messageType,message)
和Dispose().
在构造函数中,我创建StreamWriter
(AutoFlush设置为true),用于在Write方法中追加行。日志记录被广泛使用(但在一个线程中),每秒大约10-15条记录。
现在我反思以下两个问题,我期待你的评论:)
首先是autoflushing - 它是否一直打开和关闭文件? File.AppendText
是否相似?
其次,在Dispose中我刷新StreamWriter
,然后在其上调用Dispose。如果没有调用Dispose怎么办?我怎样才能确定它会被处理掉?因为如果我删除AutoFlush并且会不时刷新流(可能是通过维护内部计数器)并且当n个记录被写入缓冲区时,我会刷新它,但是如果写入少于n条记录并且程序终止呢? / p>
答案 0 :(得分:5)
是否有任何理由不能使用NLog等开源日志记录框架?
非常简单这是将第一个日志写入文件的一种非常简单的方法:
打开自动创建的NLog.config文件并取消注释示例目标和规则,它们应如下所示:
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
<logger name="*" minlevel="Trace" writeTo="f" />
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");
你会得到这个日志文件
答案 1 :(得分:1)
自动打开/代码“刷新”...但Autoflush不会“关闭/打开”。
理论上,你甚至不需要“Dispose”(毕竟这个是托管代码)。 你做需要在某处调用“Close()”。
如果程序正常关闭,它应自动刷新并关闭 - 应写入所有数据。
如果程序异常终止 - 所有投注都将关闭,以确定将会发生什么或不会发生什么。您所知道的是您的资源将被释放 - 但您的数据可能会或可能不会被写入(并且数据文件可能会也可能不会被破坏)。
'希望有所帮助......