log4net adonet appender - PullRequest
       36

log4net adonet appender

0 голосов
/ 10 июля 2011

Я использую adonet appender из log4net для отладки базы данных.Уровень ведения журнала установлен на ошибку.Ведение журнала базы данных настроено для двух приложений, работающих на разных серверах, выполняющих запись в одну и ту же таблицу в базе данных Oracle. Столбцы таблицы были loginId, level. Проблемы, с которыми я сталкиваюсь:

  1. Даже ведение журналаДля уровня установлено значение «ошибка», некоторые операторы информационного уровня также показаны в таблице, а соответствующий столбец уровня отображается как ошибка.

  2. В промежутке между некоторыми операторами идентификатор входа в систему отображается по-разному.чем фактический идентификатор входа пользователя, который запускает приложение.

  3. Итак, как настроить log4net на разных серверах для автономного поведения.

РЕДАКТИРОВАТЬ: Я сталкиваюсь с этими проблемами только при запуске нескольких экземпляров приложения, в противном случае ведение журнала в log4net возможно.

Сценарий: я просматривал опубликованную версию приложения в 2 браузерах с разными идентификаторами входа и проходил разные потоки в каждомбраузер.Результатом было то, что логин был сбит с толку.Я получаю значение идентификатора входа из сеанса пользователя в моем коде и затем сохраняю в log4net.GlobalContext.Properties.

После некоторых исследований я обнаружил, что для log4net.GlobalContext.Properties есть некоторые альтернативы, которые можно найти в http://logging.apache.org/log4net/release/manual/contexts.html. Я думаю, что вместо глобального следует использовать ThreadContext.Properties.

Мне кажется, что я сталкиваюсь с проблемами из-за сохранения в log4net.GlobalContext.Properties.

Проблема 1: Я проверилкод и заявления были logger.info.Но в таблице базы данных он регистрировался с уровнем ошибки.

Проблема 2: код для идентификатора входа в систему:

user = (User)Session["User"]; 
log4net.GlobalContext.Properties["LOGINID"] = user.Login;

в web.config.

Если вы считаете, чтоThreadContext.Properties можно использовать вместо global.properties. Можете ли вы показать мне, как использовать его для login_id.

1 Ответ

0 голосов
/ 10 июля 2011

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

Проблема 1 : Если вы получаете в своей базе данных операторы, которые являются информационными, но помечены как операторы ошибок, это проблема в вашем коде. Вы должны указать log4net, на каком уровне находится оператор log. Вы можете сказать, что утверждение «Hello World» является ФАТАЛЬНОЙ ошибкой. Похоже, ваша программа отправляет в журнал сообщения, которые вы хотите пометить как информационные сообщения, но они помечены как сообщения об ошибках. Посмотрите, куда эти операторы отправляются в файл журнала, и вы должны увидеть оператор log.ERROR. Измените это на log.INFO, и вам будет хорошо.

Проблема 2 : идентификатор входа в систему должен показывать, кто выполнил оператор журнала. Это означает, что если вы выполняете что-то под другой учетной записью (для разрешений) или если вы используете служебную учетную запись, он будет регистрировать этого пользователя, а не человека, щелкающего мышью. Я могу быть более конкретным в том, как это исправить, если вы покажете нам, как вы регистрируете информацию о пользователе.

Выпуск 3 : Я не уверен, что вы имеете в виду здесь. Log4net ведет себя автономно. Вы даже можете без проблем использовать одну и ту же конфигурацию на нескольких серверах, если вы на это намекаете.

Если вы хотите получить более полный ответ, более конкретный для ваших проблем, пожалуйста, опубликуйте файл конфигурации log4net и соответствующий код (где вы регистрируете операторы INFO, и метод, с помощью которого вы регистрируете идентификатор пользователя, будет хорошее начало).

...