Как настроить log4net программно с нуля (без настроек) - PullRequest
83 голосов
/ 21 апреля 2009

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

Все приложения развернуты ClickOnce, что представляет собой небольшую проблему с развертыванием файла конфигурации. Если бы файл конфигурации был частью основного проекта, я мог бы установить его свойства для развертывания со сборкой. Но это часть связанного приложения, поэтому у меня нет возможности развернуть его вместе с основным приложением. (Если это не правда, кто-нибудь, пожалуйста, дайте мне знать).

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

Dim apndr As New AdoNetAppender()
apndr.CommandText = "INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)"
apndr.ConnectionString = connectionString
apndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
apndr.CommandType = CommandType.Text
Dim logDate As New AdoNetAppenderParameter()
logDate.ParameterName = "@log_date"
logDate.DbType = DbType.DateTime
logDate.Layout = New RawTimeStampLayout()
apndr.AddParameter(logDate)
Dim logLevel As New AdoNetAppenderParameter()
logLevel.ParameterName = "@log_level"
'And so forth...

После настройки всех параметров для apndr я сначала попробовал это ...

Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy)
hier.Root.AddAppender(apndr)

Это не сработало. Затем, как выстрел в темноте, я попробовал это вместо этого.

BasicConfigurator.Configure(apndr)

Это тоже не сработало. У кого-нибудь есть хорошие рекомендации о том, как программно настроить log4net с нуля без файла конфигурации?

Ответы [ 12 ]

0 голосов
/ 27 октября 2011

Я использовал это:

http://www.mikebevers.be/blog/2010/09/log4net-custom-adonetappender/

Через 4 часа возиться с конфигурацией и становиться все более разочарованным.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 24 июня 2009

Странно, что BasicConfigurator.Configure(apndr) не сработало. В моем случае это сделало свое дело ... Но, в любом случае, здесь идет ответ - вы должны были написать hier.Configured = true; (код c #) после того, как вы завершили всю установку.

...