Log4Net Logging Исключения - PullRequest
       29

Log4Net Logging Исключения

1 голос
/ 25 января 2010

Я знаю, что могу регистрировать исключения в базе данных, используя Log4Net, но я хочу разбить то, что он хранит для , исключение на разные столбцы.

Кто-нибудь знает, доступно ли это, если кто-то сделал это, или просто проще регистрировать исключения в базе данных вручную?

Приветствие Энтони

UPDATE:

Если это поможет, возможно, используйте следующее:

  • Кто-нибудь знает, доступно ли это?
    • Вот такие подробности, которые мне нужны:
      • ExceptionType
      • ExceptionMessage
      • ExceptionSource
      • ExceptionTargetSite
      • ExceptionStackTrace
  • Если кто-нибудь сделал это?
  • Разве проще регистрировать исключения в базе данных вручную?

Возможно, смена формата поможет.

Ответы [ 4 ]

2 голосов
/ 03 февраля 2010

ELMAH - отличный выбор. Менее известная библиотека - CuttingEdge.Logging . Как и ELMAH, он позволяет регистрировать тип исключения, сообщение и трассировку стека в таблице в базе данных.

2 голосов
/ 25 января 2010

Если вы не хотите использовать что-то вроде ELMAH , хитрый способ может перехватывать все исключения путем переопределения Page.ProcessRequest (хитрый, потому что он помечен только для использования инфраструктурой )

public override void ProcessRequest(HttpContext context)
{
    try
    {
        base.ProcessRequest(context);
    }
    catch (Exception e)
    {
        log.ErrorFormat(e.Message); // Log exception message, or
        log.ErrorFormat(e.ToString()); // Log stack trace
        throw;
    }
}
2 голосов
/ 25 января 2010

По запросу, вы можете использовать подход, описанный здесь: Log4Net доступные поля базы данных для adoappender - кажется, есть еще несколько, например, method_name? для использования пользовательских свойств в log4net ThreadContext для возможного сохранения этого дополнительная информация об исключениях в следующем виде:

public void LogDetailedException (LogLevel level, string message, Exception exception)
{
    log4net.ThreadContext.Properties["exceptionType"] = exception.GetType().AssemblyQualifiedName;
    // appropriate logging statement
    log4net.ThreadContent.Properties.Remove("exceptionType"); // clear it, so it's not used in future calls
}

А потом по вашему шаблону:

<conversionPattern value="%property{exceptionType}" />

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

(помечено как wiki, так как это не совсем мой ответ, просто сбор различной информации и обсуждение в комментариях к ответу Митча ).

0 голосов
/ 25 января 2010

Используйте AdoNetAppender Class или, что не соответствует вашим потребностям, напишите свой собственный пользовательский Appender .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...