2015-12-06 27 views
0

奇怪,但我的MVC4應用程序沒有記錄數據庫的異常。當異常出現ExceptionHandlingAttribute時,應該創建日誌條目,但不是。 VS的調試窗口或事件瀏覽器中不會顯示log4not錯誤。 Log4net配置由命令`log4net.Config.XmlConfigurator.Configure();運行。在Global.asax的方法Application_Start中。log4net沒有記錄數據庫的異常,沒有顯示錯誤

如何讓log4net顯示配置錯誤信息?

代碼:

public class ExceptionHandlingAttribute : IExceptionFilter 
    { 
     public void OnException(ExceptionContext filterContext) 
     { 
      log4net.ILog logger = log4net.LogManager.GetLogger(typeof(MvcApplication)); 
      logger.Error(filterContext.Exception.Message, filterContext.Exception); 
      Debug.WriteLine(string.Format("Exception: {0}", filterContext.Exception.Message)); 
     } 
    } 

配置:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <system.diagnostics /> 
    <connectionStrings>   
    <!-- 
    <add name="MembershipConnection" .... 

    </connectionStrings> 
    <appSettings> 
    <!-- app settings starts --> 
    ... 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <system.web> 

    <customErrors mode="On" /> 

    <globalization uiCulture="en-GB" culture="en-GB" /> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     ... 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogIn" timeout="2880" /> 
    </authentication> 
    <httpRuntime /> 
    <profile defaultProvider="DefaultProfileProvider"> 
     <providers> 
     ... 
     </providers> 
    </sessionState> 
    <pages controlRenderingCompatibilityVersion="4.0"> 
     <namespaces> 
     ... 
     </namespaces> 
    </pages> 
    <!-- 
    <siteMap defaultProvider="CustomSiteMapProvider" enabled="true"> 
     <providers> 
     <clear/> 
     <add name="CustomSiteMapProvider" type="MvcWebRole1.Controllers.CustomSiteMapProvider"/> 
     </providers> 
    </siteMap> 
    --> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <staticContent> 
     <mimeMap fileExtension=".json" mimeType="application/json" /> 
    </staticContent> 
    <!-- turn off gzipped response--> 
    <urlCompression doStaticCompression="false" doDynamicCompression="false" /> 
    </system.webServer> 
    <runtime> 
    ... 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
    <log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="data source=.\SQLEXPRESS;initial catalog=devDB;integrated security=true;" /> 

     <commandText value="INSERT INTO Logs ([Level], [Logger], [Message], [Exception], [AccountId], [TimeStamp]) VALUES (@log_level, @logger, @message, @exception, @account_id, @log_date)" /> 
     <parameter> 
     <parameterName value="@log_level" /> 
     <dbType value="String" /> 
     <size value="30" /> 
     <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="255" /> 
     <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@exception" /> 
     <dbType value="String" /> 
     <size value="2000" /> 
     <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@account_id" /> 
     <dbType value="Int32" /> 
     <size value="32" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
    </appender> 

    <!-- Set root logger level to DEBUG and its only appender to A1 --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="AdoNetAppender" /> 
    </root> 
    </log4net> 
</configuration> 

工作SELECT代碼:

SELECT TOP 1000 [Id] 
     ,[Level] 
     ,[Logger] 
     ,[Message] 
     ,[Exception] 
     ,[AccountId] 
     ,[TimeStamp] 
    FROM [devDB].[dbo].[Logs] 

更新1)

log4net的重新安裝到版本「2。 0.2「(nuget)=>」1.2.12「,但仍然不起作用。

更新2) 我修復了配置文件,現在可以工作,但不完全:)。

當應用程序在本地啓動並且異常被模擬時,日誌不會在數據庫中創建,但會保存在某處:)。當應用程序關閉時,SQL日誌表中仍然沒有數據。但是當應用程序再次啓動時,日誌出現在sql表中。哪裏不對:)?

解決: 我不得不改變緩衝區的大小從100到1 :),當緩衝器未滿,數據不會被保存:)

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="1" /> 
+1

你已經升級到1.2.14 log4net的?在該版本中有一個[已知問題](https://issues.apache.org/jira/browse/LOG4NET-489)與ADONetAppender。如果沒有,[啓用log4net內部調試](http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx/)並查看記錄的內容。 – stuartd

+0

是的,我的版本是1.2.14.0 :) ...我會降級它。謝謝 –

+0

已經完整的解決方案[這裏](http://stackoverflow.com/questions/3971250/log4net-configuration-from-assembly-attribute-does-not-load-configuration-file/35124349#35124349) – adnan

回答