C# C写入日志文件

C# C写入日志文件,c#,C#,我想在应用程序运行时将一些事件和异常写入日志文件。日志文件大小限制为N MB。当文件大小超过N MB时,我希望从文件的开头开始覆盖。由于文件大小是N兆字节,我不想复制到临时文件,然后重命名它 为上述问题提供任何建议/方法。尝试使用Log4Not,或Microsoft的企业库日志记录组件或者使用Log4nethttp://logging.apache.org/log4net/index.html 你可以在哪里做这件事 logger.Debug("Here is a debug log.")

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


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

尝试使用Log4Not,或Microsoft的企业库日志记录组件

或者使用Log4nethttp://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.");
    LogEntry entry = new LogEntry()
                         {
                             Message = "Hello Ent. Lib. Logging"
                         };
    Logger.Write(entry);
或者使用企业库http://msdn.microsoft.com/en-us/library/ff648951.aspx 你可以在哪里做这件事

    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.");
    LogEntry entry = new LogEntry()
                         {
                             Message = "Hello Ent. Lib. Logging"
                         };
    Logger.Write(entry);
两者都可以配置为通过web/app.config指向文件。

签出! 它非常灵活,允许您在运行时更改日志记录的行为,在何处记录/如何记录/记录什么

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

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

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


但是,Microsoft有一个解决方案,您可以尝试绕过日志文件无限增长的问题。

作为Log4Net的替代方案,我可以推荐
在拥有简单的日志类之后,我们发现它更透明、更易于使用。

为什么不试试Microsoft的企业日志库,它将为您提供比旧的FileIO操作或log4net更多的功能


微软已经发布了5.0版的企业图书馆,它将帮助您编写日志,并通过用户界面轻松配置日志。试试看。

为什么要重新发明轮子?有很多像NLog这样的应用程序可以帮你做到这一点。你也有log4net,它确实是可定制的,正如前面所说的,不要重新发明轮子:我认为log4net会比你能做的任何事情都好,除非你花了12个月的时间在它上面,但你的老板不会喜欢它。Windows还是Web?如果网络艾玛岩石!如果您使用新的FileInfofilename.Length,而不是读取每个字节,那么情况就不会那么糟糕了。事实上,我正在搜索类似FileInfo.GetSize或FileInfo.Size的内容,但没有找到任何内容。在我的领域里,测试文件大小不是经常发生的事情。顺便说一句,改进si上面代码段的另一种方法是在StreamWriter上使用Using语句,我认为这样做会更好;