У меня запущено 15 параллельных процессов Powershell, поэтому я не могу войти в файл и не могу залить средство просмотра событий приложения. Вход в базу данных имеет смысл. Кажется, у меня общая проблема, но единственное решение, которое я нашел, - это вручную написать реализацию Log4Net, а не настроить простой файл конфигурации. Это звучит неправильно для меня. Я не могу представить, что нет никакого способа обойти эту проблему конфигурации, но, возможно, кто-то может указать мне более полный ответ.
Полное обсуждение вопроса существует по адресу:
Social.Technet
Моя конфигурация соответствует спецификациям Apache для баз данных Oracle 9: Документы Apache Config
Первый параметр использует RawTimeStampLayout и работает как шарм. Второй параметр пытается использовать PatternLayout и завершается неудачно.
<parameter>
<parameterName value=":log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value=":message" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
Когда я пытаюсь добавить сообщение с помощью PatternLayout, я получаю:
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [AdoNetAppender_Oracle] of type [log4net.Appender.AdoNetAppender].
Reported error follows.
System.ArgumentNullException: CreateConverterInstance cannot create instance, converterType is null
Parameter name: converterType
Точно так же, как и все остальные, если я использую RawPropertyLayout вместо PatternLayout, я больше не получаю сообщение об ошибке, но я только регистрирую значения NULL для этих полей.
Согласно обсуждению в Social.Technet, один из способов заставить регистрацию работать, это использовать код для создания таких параметров:
$param2 = New-Object log4net.Appender.AdoNetAppenderParameter
$param2.ParameterName = "@log_level"
$parm2Layout=New-Object log4net.Layout.PatternLayout("%level")
$param2.Layout = New-Object log4net.Layout.Layout2RawLayoutAdapter($parm2Layout)
$param2.DbType = "String"
$param2.Size = 50
$sqlAppender.AddParameter($param2)
Обратите внимание, что PatternLayout создается, а затем вручную подается в адаптер 2RawLayout. Похоже, что этот шаг отсутствует в процессе преобразования конфигурации.
Кто-нибудь знает лучший способ? У кого-нибудь есть рабочая конфигурация PowerShell-Log4Net-Oracle?