2016-11-15 5 views
0

Я разрабатываю форму окна в C#. Net 3.5. Я использую log4net для отображения различных сообщений журнала. Моего журнала сообщения выглядят следующим образом:Как игнорировать определенные сообщения журнала, если они уже существуют C#

ОШИБКА 15.11.2016 12:47:24 - Компьютер: SUPER, Пользователь: XYZ, модуль: ServiceA, метод: loadSettings, [ERROR1001] Connectionlost

ОШИБКА 15,11. 2016 12:47:34 - Компьютер: SUPER, Пользователь: XYZ, Модуль: ServiceA, Метод: loadSettings, [ERROR1001] Connectionlost

ОШИБКА 15.11.2016 12:47:44 - Компьютер: SUPER, Пользователь: XYZ, Module : ServiceA, Метод: loadSettings, [ERROR1001] Номер подключения

Есть ли способ проверить, существует ли сообщение журнала? Я хочу отобразить вышеприведенное сообщение один раз, если это произойдет.

Вот мой код:

private static void Log(string message, string type, string module) 
{ 
    try 
    { 
     sLogMessage = string.Format("Computer: {0}, User: {1}, Module: {2}, Method: {3}, [{4}] {5}{6}", 
             System.Environment.MachineName, System.Environment.UserName, 
             module, new StackTrace().GetFrame(2).GetMethod().Name, 
             type, message, Environment.NewLine); 
    } 
    catch (Exception) 
    { 
    } 

    switch (type) 
    { 
     case "DEBUG": logger.Debug(sLogMessage); 
      break; 
     case "INFO": 
      try 
      { 
       logger.Info(sLogMessage); 
      } 
      catch (Exception) 
      { 
      } 
      break; 
     case "WARNING": logger.Warn(sLogMessage); 
      break; 
     //here displays my error message and i want to check if it already exixts 
     case "ERROR": logger.Error(sLogMessage); 
      break; 
    } 
} 
+3

Да, кешируйте свои сообщения об ошибках при их получении и проверяйте их. Не уверен, почему вы только хотите регистрировать его один раз в день; вы теряете одно из больших преимуществ регистрации, если вы это делаете. Вам нужно будет снять метку с вашего сообщения, хотя перед сравнением. –

+0

Я не имею в виду раз в день, скажем, каждые 20 секунд или около того. – DeveloperSD

+0

есть ли какой-нибудь пример кода – DeveloperSD

ответ

0

Вы можете прочитать все строки журнала и поиск, если они содержат журнальное сообщение и проверить их временную метку, чтобы соответствовать вашему состоянию, НО, не видя ту часть, где Вы придаете метка времени или размер, в котором журнал растет это своего рода дикое предположение ..

в любом случае, она должна быть достаточно простой, чтобы сделать что-то вроде этого:

 string sLogMessage = "your Log message"; 
     DateTime yourTimeStamp = DateTime.Now; 

     if (!File.ReadAllLines("PathToLogFile").Any(l => l.Contains(sLogMessage) && 
      (DateTime.Parse(l.Substring("extract the timestamp from the line")) - yourTimeStamp).TotalDays < 1)) 
     { 
      //Add it to the log 
     } 
0

Вы можете сделать что-то вроде:

private class LogMessage 
{ 
    string module { get; set; } 
    string message { get; set; } 
    DateTime LoggedOn { get;set;} 
} 
private List<LogMessage> messages = new List<LogMessage>(); 

private static void Log(string message, string type, string module) 
{ 
    /* remove any messages older than X time */ 

    if(messages.Where(x => x.module == module && x.message == message).Any()) 
    { 
     // You can add more properties to the where for comparison 
     // Already exist so return 
     return; 
    } 

    messages.Add(new LogMessage() { module = module, message = message, LoggedOn = DateTime.Now}); 


    try 
    { 
     sLogMessage = string.Format("Computer: {0}, User: {1}, Module: {2}, Method: {3}, [{4}] {5}{6}", 
             System.Environment.MachineName, System.Environment.UserName, 
             module, new StackTrace().GetFrame(2).GetMethod().Name, 
             type, message, Environment.NewLine); 
    } 
    catch (Exception) 
    { 
    } 

    switch (type) 
    { 
     case "DEBUG": logger.Debug(sLogMessage); 
      break; 
     case "INFO": 
      try 
      { 
       logger.Info(sLogMessage); 
      } 
      catch (Exception) 
      { 
      } 
      break; 
     case "WARNING": logger.Warn(sLogMessage); 
      break; 
     //here displays my error message and i want to check if it already exixts 
     case "ERROR": logger.Error(sLogMessage); 
      break; 
    } 
} 
+0

спасибо Steve :-) попробуем это одно спасибо за помощь ур – DeveloperSD

+0

Вам нужно будет немного расшириться, но он должен сделать работу, в которой вы нуждаетесь. – Steve

+0

приватный список messages = new Список (); не может создать список наподобие этого – DeveloperSD

 Смежные вопросы

  • Нет связанных вопросов^_^