2016-10-13 4 views
0

나는 이것에 관해 많은 스레드를 보았고, 왜 내 코드가 작동하지 않는지를 볼 수 없습니다. 콘솔 및 fileappender에 로그온하지만 데이터베이스 로그가 작동하지 않습니다.Log4Net은 데이터베이스에 쓰지 않지만 작동합니다.

내의 app.config 설정은 다음과 같습니다

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
    </configSections> 
    <!-- Log4net Logging Setup --> 
    <log4net> 
    <appender name="Console" type="log4net.Appender.ConsoleAppender"> 
     <threshold value="Debug" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- Pattern to output the caller's file name and line number --> 
     <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <threshold value="Info" /> 
     <file value="C:\\Sample.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <threshold value="Error" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
     <connectionString value="Connection_String"/> 
     <commandText value="MyStoredProc" /> 
     <commandType value="StoredProcedure" /> 
     <parameter name="AgentId"> 
     <parameterName value="@AgentId"/> 
     <dbType value="String"/> 
     <size value="6"/> 
     <layout type="log4net.Layout.PatternLayout" value="%property{AgentId}" /> 
     </parameter> 
     <parameter name="customerId"> 
     <parameterName value="@customerId"/> 
     <dbType value="String"/> 
     <size value="15"/> 
     <layout type="log4net.Layout.PatternLayout" value="%property{customerId}" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@log"/> 
     <dbType value="String"/> 
     <size value="4000"/> 
     <layout type="log4net.Layout.PatternLayout" value="%message"/> 
     </parameter> 
     <parameter> 
     <parameterName value="@ErrorDate"/> 
     <dbType value="DateTime"/> 
     <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}"/> 
     </parameter> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="Console" /> 
     <appender-ref ref="RollingFileAppender" /> 
     <appender-ref ref="AdoNetAppender" /> 
    </root> 
    </log4net> 

C# 코드는 다음과 같습니다

log4net.Config.BasicConfigurator.Configure(); 
log4net.ILog Log = log4net.LogManager.GetLogger(typeof(T)); 
log4net.LogicalThreadContext.Properties["AgentId"] = agentId; 
log4net.LogicalThreadContext.Properties["customerId"] = custId; 
Log.Error(String.Format("Non fatal error: {0} ({1})", ex.Message, ex.InnerException), ex); 
+0

연결 문자열이 잘못 되었습니까? – code4life

+0

내부 로깅을 켜보십시오. http://logging.apache.org/log4net/release/faq.html#troubleshooting http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx/ – Mick

+0

왜 'BasicConfigurator'를 사용하고 있습니까? Configure()'? "BasicConfigurator.Configure() 메서드를 호출하면 Log4net 설정이 간단 해집니다.이 메서드는 루트 로거에 ConsoleAppender를 추가하기 위해 사용됩니다."_. 대신'XmlConfigurator.Configure()'를 사용하십시오. – stuartd

답변

0

당신은 log4net.Config 대신 log4net.Config.XmlConfigurator.Configure() 메소드를 사용한다 .BasicConfigurator.Configure();

XmlConfigurator는 구성을 읽고 구성된대로 데이터베이스에 로그온 할 수있게합니다. BasicConfigurator는 콘솔에만 기록합니다.

관련 문제