C# 使用Log4Net创建一个只读日志文件,并在2个文件中单独登录

C# 使用Log4Net创建一个只读日志文件,并在2个文件中单独登录,c#,log4net,readonly,C#,Log4net,Readonly,第一个问题是: 我正在用c#开发一个应用程序,它创建两个日志文件(.txt文件):一个用于错误,另一个用于用户所做的修改。这两个文件是用log4net创建的。我看到的问题是,这些文件可以被编辑,因此会被错误地修改 我想将这些文件设置为只读,并且log4net仍然可以写入它们。因为如果我只是更改文件中的属性,则不会写入下一个日志 有办法吗 此外,应用程序的用户可以从应用程序中打开此日志文件。为此,我使用下一个代码: System.IO.FileInfo finfo = new System.IO.

第一个问题是:

我正在用c#开发一个应用程序,它创建两个日志文件(.txt文件):一个用于错误,另一个用于用户所做的修改。这两个文件是用log4net创建的。我看到的问题是,这些文件可以被编辑,因此会被错误地修改

我想将这些文件设置为只读,并且log4net仍然可以写入它们。因为如果我只是更改文件中的属性,则不会写入下一个日志

有办法吗

此外,应用程序的用户可以从应用程序中打开此日志文件。为此,我使用下一个代码:

System.IO.FileInfo finfo = new System.IO.FileInfo("path");
if (finfo.Exists)
{
 //finfo.Attributes = System.IO.FileAttributes.ReadOnly; 
 // I don't use the previous line at the moment, because it blocks the followings logs.
 System.Diagnostics.Process.Start("path");
}
这是创建和调用记录器的代码:

public static class CLogger
{
   private static readonly ILog logger = LogManager.GetLogger(typeof(CLogger));

   static CLogger()
   {
      XmlConfigurator.Configure(new System.IO.FileInfo("path to .config file"));
   }

   public static void WriteLog(ELogLevel logLevel, String log)
   {
      if (logLevel.Equals(ELogLevel.DEBUG))
      {
         logger.Debug(log);
      }
      else if (logLevel.Equals(ELogLevel.ERROR))
            .
            .
            .          
      else if (logLevel.Equals(ELogLevel.WARN))
      {
                logger.Warn(log);
      }
   }
}
调用记录器:

CLogger.WriteLog(ELogLevel.ERROR, ex.ToString());
我有一个与之相关的第二个问题:

要创建这两个单独的日志文件,我使用.config文件中的以下几行:


行得通,但我这样做行吗? 我怀疑是否应该使用“LogFileAppender”或“RollingFileAppender”,这就是为什么我同时使用它们的原因

提前感谢。

问题1: 我认为这样做是错误的。如果您担心他们会意外地修改它,那么您有两个选择:

  • 制作日志文件的副本并显示该副本
  • 在您控制的窗口中显示日志文件(即,使文本区域为只读)
问题2: “普通”FileAppender将始终写入同一个文件,这可能不是问题,因为您的应用程序偶尔会停止一次,并且您可以在日志文件变得太大时删除它。对于长时间运行的应用程序,这不是一个选项:RollingFileAppender将每隔一段时间创建一个新文件(由特定大小或特定时间定义)。通过这种方式,您可以删除旧的日志文件,并且永远不会耗尽磁盘空间


也许你想了解更多关于appenders的信息。

谢谢Stefan。我的第二个问题解决了。但是关于另一个问题,我会选择复制日志文件。你会怎么做?自动复制?或者在启动应用程序时?…我想当用户想要查看日志文件时,您会复制一份。当日志文件很大时,这可能不是一个好主意,但是显示一个非常大的日志文件也不是很好。