log4net adonet appender

Я использую 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 ответ

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

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

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

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

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

Другие вопросы по тегам