Log4Net到Oracle - > PatternLayout失败,“converterType为null”

时间:2011-01-14 20:25:07

标签: powershell log4net

我正在运行15个并行的Powershell进程,因此我无法登录到文件,也无法充斥应用程序事件查看器。记录到数据库非常有意义。我的问题似乎是一个常见问题,但我发现的唯一解决方案是手动编写Log4Net实现代码,而不是设置一个简单的配置文件。这对我来说听起来不对。我无法想象这个配置问题无法解决,但也许有人可以指出我更完整的答案。

该问题的充分讨论存在于: Social.Technet

我的配置符合Oracle 9数据库的Apache规范:Apache Config Docs

第一个参数使用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配置?

1 个答案:

答案 0 :(得分:1)

您确定无法登录文件吗? FileAppender有一个+MinimalLock配置,其中log4net仅在追加时获取锁定。 log4net文件appender也是fast该死的。