我正在运行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配置?
答案 0 :(得分:1)
您确定无法登录文件吗? FileAppender
有一个+MinimalLock
配置,其中log4net仅在追加时获取锁定。 log4net文件appender也是fast该死的。