我发现其他职位有类似的问题,但迄今为止我一直没能解决我的具体情况。
如果我把log4net的配置在App.config然后一切工作正常,但我想它在一个单独的文件。
我已经看过下面的链接,并试图执行一些提出的解决方案(但也许我没有理解错误的话)的:
相似的,所以问题,但随着网络方案
Apache文档,“阅读文件直接”部分
蒂姆·科里的log4net的教程
因此,这里是我的Log4NetSettings.config文件的内容(包裹在配置元素):
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="" />
<commandText value="INSERT INTO [Calculation Engine Log] ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="AdoNetAppender"/>
</root>
</log4net>
我在运行期间更改的ConnectionString值。
下面是我在App.config:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<appSettings>
<add key="log4net.Config" value="Log4NetSettings.config" />
</appSettings>
<log4net configSource="Log4NetSettings.config" />
在可执行的类我有这样的:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4NetSettings.config", Watch = true)]
然后,只要我能得到的ConnectionString的保持,并将其配置到AdoNetAppender,我呼吁:
log.Info("Testing");
我也有:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
在与该组件的属性和第一日志调用的类。
该Log4NetSettings.config文件的生成操作设置为内容和它的“复制到输出目录”设置为“一直拷贝”。
我一直在拉我的头发,我不知道我做错了。 如果我有Log4NetSettings.config作为只是一个普通的xml文件? 我应该把在AssemblyInfo.cs中集属性文件? 我倒是应该叫:
XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "Log4NetSettings.config"));
比具有集属性?
这感觉就像我已经尝试了很多不同的东西,也许我已经把它们混合起来,并得到了错误的组合。