运行 在本地时没有实例化附加程序
No appenders instantiated when running locally
我有一个使用 log4net 的 Web 应用程序。我的 Web 应用程序已部署到 Azure,并且可以在那里完美运行。但是,当我通过 VS2013(更新 4)在本地 运行 时,log4net 不会实例化 AdoNetAppender
.
我通过中断所有抛出的异常来检查异常,没有抛出任何异常,我激活了内部 log4net 调试并且调试输出中没有显示任何异常。
我也添加了 <trust level="Full"/>
到我的 web.config
,没有...
我再次感到难过,它可以在 Azure 上运行,但不能在本地运行。有任何想法吗?谢谢!
编辑 这是我的web.config
(仅相关行)
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=**********;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
<log4net debug="true">
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionStringName value="DefaultConnection" />
<commandText value="INSERT INTO Log ([StoreId],[Date],[Thread],[Level],[Logger],[Message],[Exception],[User]) VALUES (@store, @log_date, @thread, @log_level, @logger, @message, @exception, @user)" />
<parameter>...</parameter>
...
</appender>
<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
<appender-ref ref="DebugAppender" />
</root>
</log4net>
<appSettings>
<add key="log4net.Internal.Debug" value="true" />
<add key="log4net.Config" value="log4net.simple.config"/>
<add key="log4net.Config.Watch" value="True"/>
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" maxRequestLength="1048576" />
<customErrors mode="Off" />
<trust level="Full"/>
</system.web>
</configuration>
更新 2
我发现虽然 log4net
配置正确,调用 LogManager.GetLogger("...")
returns 一个没有附加程序的记录器。但是,如果我进一步检查层次结构,我可以在那里看到我的 AdoNetAppender
,并且当 XmlConfigurator.Configure()
运行s 时它输出以下 log4net: Adding appender named [ADONetAppender] to logger [root].
...
所以问题归结为(这只发生在本地,而不是在生产环境中)从 LogManager.GetLogger(...)
返回的对象不包含任何附加程序。
已解决
请参阅下面已接受的答案。事实证明,我真正缺少的只是在我的 Application_Start
方法中对 XmlConfigurator.Configure()
的调用。我提供的所有其他 'evidence' 都是正常行为,我在本地看不到任何日志消息的原因是我的本地数据库和生产数据库之间的日志 table 模式之间存在轻微的无意差异。
您可以在Global.asax中配置log4net:
public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
XmlConfigurator.Configure();
这适用于 azure 和 local。
我有一个使用 log4net 的 Web 应用程序。我的 Web 应用程序已部署到 Azure,并且可以在那里完美运行。但是,当我通过 VS2013(更新 4)在本地 运行 时,log4net 不会实例化 AdoNetAppender
.
我通过中断所有抛出的异常来检查异常,没有抛出任何异常,我激活了内部 log4net 调试并且调试输出中没有显示任何异常。
我也添加了 <trust level="Full"/>
到我的 web.config
,没有...
我再次感到难过,它可以在 Azure 上运行,但不能在本地运行。有任何想法吗?谢谢!
编辑 这是我的web.config
(仅相关行)
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=**********;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
<log4net debug="true">
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionStringName value="DefaultConnection" />
<commandText value="INSERT INTO Log ([StoreId],[Date],[Thread],[Level],[Logger],[Message],[Exception],[User]) VALUES (@store, @log_date, @thread, @log_level, @logger, @message, @exception, @user)" />
<parameter>...</parameter>
...
</appender>
<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
<appender-ref ref="DebugAppender" />
</root>
</log4net>
<appSettings>
<add key="log4net.Internal.Debug" value="true" />
<add key="log4net.Config" value="log4net.simple.config"/>
<add key="log4net.Config.Watch" value="True"/>
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" maxRequestLength="1048576" />
<customErrors mode="Off" />
<trust level="Full"/>
</system.web>
</configuration>
更新 2
我发现虽然 log4net
配置正确,调用 LogManager.GetLogger("...")
returns 一个没有附加程序的记录器。但是,如果我进一步检查层次结构,我可以在那里看到我的 AdoNetAppender
,并且当 XmlConfigurator.Configure()
运行s 时它输出以下 log4net: Adding appender named [ADONetAppender] to logger [root].
...
所以问题归结为(这只发生在本地,而不是在生产环境中)从 LogManager.GetLogger(...)
返回的对象不包含任何附加程序。
已解决
请参阅下面已接受的答案。事实证明,我真正缺少的只是在我的 Application_Start
方法中对 XmlConfigurator.Configure()
的调用。我提供的所有其他 'evidence' 都是正常行为,我在本地看不到任何日志消息的原因是我的本地数据库和生产数据库之间的日志 table 模式之间存在轻微的无意差异。
您可以在Global.asax中配置log4net:
public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
XmlConfigurator.Configure();
这适用于 azure 和 local。