我想在应用程序运行时将某些事件和例外写入日志文件。日志文件大小限制为N兆字节。当文件大小超过N兆字节时,我想从文件的开头覆盖。由于文件大小为N兆字节,我不想复制到临时文件,然后重命名它。C#写入日志文件
为上述问题提供任何建议/方法。
我想在应用程序运行时将某些事件和例外写入日志文件。日志文件大小限制为N兆字节。当文件大小超过N兆字节时,我想从文件的开头覆盖。由于文件大小为N兆字节,我不想复制到临时文件,然后重命名它。C#写入日志文件
为上述问题提供任何建议/方法。
如果您的问题涉及写入.svclog文件的.Net跟踪侦听器,则答案为否:您无法将其配置为在达到某个限制时从头开始写入。
但是,Microsoft有一个solution called Circular Tracing,您可以尝试绕过无限制地增长日志文件的问题。
尝试Log4Not,或Microsoft
企业库记录组件要么使用log4net的(http://logging.apache.org/log4net/index.html),在那里你可以做到这一点
logger.Debug("Here is a debug log.");
logger.Info("... and an Info log.");
logger.Warn("... and a warning.");
logger.Error("... and an error.");
logger.Fatal("... and a fatal error.");
或者使用企业Libaries(http://msdn.microsoft.com/en-us/library/ff648951.aspx),在那里你可以做到这一点
LogEntry entry = new LogEntry()
{
Message = "Hello Ent. Lib. Logging"
};
Logger.Write(entry);
两者都可以配置为指向一个文件通网/app.c onfig。
结账log4net! 它非常灵活,并允许您在运行时更改日志记录的行为(在何处登录/如何记录/记录什么内容)。
RollingFileAppender
允许您定义达到给定大小限制时的行为,它可能可以回答您的问题。
float N = 1; //Log File size in MB
FileInfo logFile = new FileInfo("c:\\myLogFile.txt");
if (logFile.Length > 1024 * N)
{
logFile.Delete();
logFile.Create();
}
using (StreamWriter logStream = logFile.AppendText())
logStream.Write("String to write");
最简单的方法,可能是最差的。 编辑以反映Hans Kesting的评论。
如果你使用'new FileInfo(filename).Length',而不是读取每个字节,那么它会更坏。 – 2010-10-14 08:42:47
事实上,我正在寻找类似FileInfo.GetSize或Fileinfo.Size的东西,并没有发现任何东西。 文件大小的测试不是经常在我的文件中发生的事情。 顺便说一句,另一种方法来改善上面的片段以使用StreamWriter上的Using语句 – vaitrafra 2010-10-14 09:00:18
作为Log4Net的替代品,我可以推荐NLog 我们发现它在自己的简单日志类后更透明和易于使用。
为什么不试试微软的企业日志库,它会比旧的FileIO操作或log4net提供更多的功能。
微软已经发布了5.0版的企业库,它可以帮助你编写日志并且用UI轻松配置它们,试试看。
为什么重新发明车轮?有很多应用程序(如NLog)可以为你做到这一点。 – RPM1984 2010-10-14 08:26:04
你也有log4net,它是真正可定制的,如前所述,不要重复发明轮子:)(我认为log4net会比你能做的任何事情都好,除非你花了12个月的时间,但你的老板不会喜欢它)。 – 2010-10-14 08:27:34
Windows还是Web?如果Web ** Elmah **岩石! http://code.google.com/p/elmah/ – balexandre 2010-10-14 08:43:14