我有一个 Azure 工作者角色,我希望更新日志记录(该项目有现有的日志记录,尽管我不相信它曾经工作过)。它设置为使用 Common.Logging,但使用 Log4Net。我在 Log4Net 中设置了 2 个附加程序——一个用于 ElasticSearch,一个用于滚动文件——它们都没有记录任何输出。
在worker角色的app.config中,我配置了log4net,后面是Common.Logging:
...
<log4net>
<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4stash">
<Server>localhost</Server>
<Port>9200</Port>
<IndexName>log_test_%{+yyyy-MM-dd}</IndexName>
<IndexType>LogEvent</IndexType>
<Bulksize>2000</Bulksize>
<BulkIdleTimeout>10000</BulkIdleTimeout>
<IndexAsync>False</IndexAsync>
<ElasticFilters>
<Add>
<Key>My Data Origin</Key>
<Value>Worker Role</Value>
</Add>
</ElasticFilters>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\tmp\log4net_rollingfile.log" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ElasticSearchAppender" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
我倾向于认为配置中有问题。但是,RollingFile appender 确实创建了 c:\tmp\log4net_rollingfile.log,所以我无法解释为什么实际上什么都没有写入文件。此外,没有数据发送到 ElasticSearch。
使用“log4net.Internal.Debug”打开 Log4Net 诊断程序后,我可以看到附加程序正在加载:
log4net: Adding appender named [ElasticSearchAppender] to logger [root].
log4net: Adding appender named [RollingFile] to logger [root].