2010-10-14 214 views
0

我想在应用程序运行时将某些事件和例外写入日志文件。日志文件大小限制为N兆字节。当文件大小超过N兆字节时,我想从文件的开头覆盖。由于文件大小为N兆字节,我不想复制到临时文件,然后重命名它。C#写入日志文件

为上述问题提供任何建议/方法。

+6

为什么重新发明车轮?有很多应用程序(如NLog)可以为你做到这一点。 – RPM1984 2010-10-14 08:26:04

+1

你也有log4net,它是真正可定制的,如前所述,不要重复发明轮子:)(我认为log4net会比你能做的任何事情都好,除非你花了12个月的时间,但你的老板不会喜欢它)。 – 2010-10-14 08:27:34

+0

Windows还是Web?如果Web ** Elmah **岩石! http://code.google.com/p/elmah/ – balexandre 2010-10-14 08:43:14

回答

0

如果您的问题涉及写入.svclog文件的.Net跟踪侦听器,则答案为否:您无法将其配置为在达到某个限制时从头开始写入。

但是,Microsoft有一个solution called Circular Tracing,您可以尝试绕过无限制地增长日志文件的问题。

2

尝试Log4Not,或Microsoft

企业库记录组件
2

要么使用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。

2

结账log4net! 它非常灵活,并允许您在运行时更改日志记录的行为(在何处登录/如何记录/记录什么内容)。

RollingFileAppender允许您定义达到给定大小限制时的行为,它可能可以回答您的问题。

+1

我认为[RollingFileAppender](http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html)会做得更好工作;) – Oliver 2010-10-14 08:46:48

+0

@奥利弗:是的,你是对的!这现在已经纠正! – tsimbalar 2010-10-14 08:51:48

2
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的评论。

+1

如果你使用'new FileInfo(filename).Length',而不是读取每个字节,那么它会更坏。 – 2010-10-14 08:42:47

+0

事实上,我正在寻找类似FileInfo.GetSize或Fileinfo.Size的东西,并没有发现任何东西。 文件大小的测试不是经常在我的文件中发生的事情。 顺便说一句,另一种方法来改善上面的片段以使用StreamWriter上的Using语句 – vaitrafra 2010-10-14 09:00:18

1

作为Log4Net的替代品,我可以推荐NLog 我们发现它在自己的简单日志类后更透明和易于使用。

0

为什么不试试微软的企业日志库,它会比旧的FileIO操作或log4net提供更多的功能。

微软已经发布了5.0版的企业库,它可以帮助你编写日志并且用UI轻松配置它们,试试看。