Создайте файл журнала ReadOnly с Log4Net - PullRequest
0 голосов
/ 01 марта 2011

Я разрабатываю приложение на c #, которое создает 2 файла журнала (файлы .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());

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

В основном, если приложение запускается с правами пользователя, то в конечном итоге пользователь должен иметь права на доступ к файлам: если он этого не делает, приложение также не сможет записывать в эти файлы.

0 голосов
/ 01 марта 2011

Я бы поменял права на папку, в которую пишутся логи.Веб-сервер имеет право на чтение / запись, все остальные - только на чтение.

...