log4net adonet appender
Я использую adonet appender из log4net для отладки базы данных. Уровень ведения журнала установлен на ошибку. Ведение журнала базы данных настроено для двух приложений, работающих на разных серверах, выполняющих запись в одну и ту же таблицу в базе данных Oracle. Столбцы таблицы были loginId, level. Проблемы, с которыми я сталкиваюсь:
Даже уровень ведения журнала установлен на ошибку, некоторые операторы информационного уровня также были показаны в таблице, а соответствующий столбец уровня показан как ошибка.
В промежутке между некоторыми утверждениями идентификатор входа отображается не так, как реальный идентификатор входа пользователя, который запускает приложение.
Итак, как настроить 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 ответ
Я начал публиковать это как комментарий, но понял, что, хотя у меня нет подробностей, которые мне нужны, чтобы дать вам конкретный ответ, я могу указать вам верное направление.
Проблема 1: Если вы получаете в своей базе данных операторы, которые являются информационными, но помечены как операторы ошибок, это проблема в вашем коде. Вы должны указать log4net, на каком уровне находится оператор log. Вы можете сказать, что выражение "Hello World" является ФАТАЛЬНОЙ ошибкой. Похоже, ваша программа отправляет в журнал сообщения, которые вы хотите пометить как информационные сообщения, но они помечены как сообщения об ошибках. Посмотрите, где эти заявления отправляются в файл журнала, и вы должны увидеть log.ERROR
заявление. Изменить это на log.INFO
и тебе должно быть хорошо идти.
Проблема 2. Идентификатор входа в систему должен показать, кто выполнил оператор журнала. Это означает, что если вы выполняете что-то под другой учетной записью (для разрешений) или если вы используете служебную учетную запись, он будет регистрировать этого пользователя, а не человека, щелкающего мышью. Я могу быть более конкретным в том, как это исправить, если вы покажете нам, как вы регистрируете пользовательскую информацию.
Вопрос 3: Я не уверен, что вы имеете в виду здесь. Log4net ведет себя автономно. Вы даже можете без проблем использовать одну и ту же конфигурацию на нескольких серверах, если вы на это намекаете.
Если вы хотите получить более полный ответ, более конкретный для ваших проблем, пожалуйста, опубликуйте конфигурационный файл log4net и соответствующий код (где вы регистрируете операторы INFO и метод, с помощью которого вы регистрируете ID пользователя, будет хорошим началом),