2011-12-14 3 views
1

SQL Server 2005 DB에 행을 삽입 할 때 환경, ApplicationName, ApplicationPath, ExceptionData에 null 값이 나타납니다. 의 Global.asax에서log4net db에 오류를 저장하고 매개 변수에 null을 얻음

<log4net> 
    <appender name="ADONetAppender_SqlServer" 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="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xx;Connection Timeout=200;" /> 
    <commandText value="INSERT INTO [ApplicationLog] ([TimeStamp],[SeverityLevel],[LoggerName],[Environment],[ApplicationName],[ApplicationPath],[ServerName],[Message],[ExceptionData]) VALUES (@TimeStamp,@SeverityLevel,@LoggerName,@Environment,@ApplicationName,@ApplicationPath,@ServerName,@Message,@ExceptionData)" /> 
    <parameter> 
     <parameterName value="@TimeStamp" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@SeverityLevel" /> 
     <dbType value="String" /> 
     <size value="10" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@LoggerName" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@Environment" /> 
     <dbType value="String" /> 
     <size value="-1" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{EnvironmentName}" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@ApplicationName" /> 
     <dbType value="String" /> 
     <size value="128" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{AppName}" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@ApplicationPath" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{AppPath}" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@ServerName" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{log4net:HostName}" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@Message" /> 
     <dbType value="String" /> 
     <size value="-1" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@ExceptionData" /> 
     <dbType value="String" /> 
     <size value="-1" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{exceptionDetails}" /> 
     </layout> 
    </parameter> 
</appender> 
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <to value="xxx" /> 
    <from value="xxx" /> 
    <subject value="(Error) xxx" /> 
    <smtpHost value="xxx" /> 
    <bufferSize value="1" /> 
    <lossy value="false" /> 
    <threshold value="ERROR" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%utcdate [%thread] %-5level %logger [%property{log4net:HostName}] - %message%newline%newlineException details:%newline%property{exceptionDetails}" /> 
    </layout> 
</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="ADONetAppender_SqlServer" /> 
    <appender-ref ref="SmtpAppender" /> 
</root> 

가함으로써 Application_Error, 내가 구성하고, 다음과 같이 예외를 로그인 할 log4net 전화 : 다음과 같이

내 log4net 구성은

Dim ex As New Exception 
ex = Server.GetLastError  

log4net.Config.XmlConfigurator.Configure() 
log.Logger.Log(ex.Source.GetType, log4net.Core.Level.Fatal, ex.StackTrace, ex) 

내가 뭘 잘못하고 있니?

답변

1

명시 적으로 달리 언급하지 않았거나 초기화하는 방법을 보여주지 않았기 때문에 Environment, ApplicationName, ApplicationPath 및 ExceptionData가 사실이라고 생각하지 않는 사전 정의 된 속성이라고 생각하는 것 같습니다.

따라서 이러한 속성을 사용하려는 경우 코드의 어딘가에 이러한 속성을 원하는 값으로 설정해야합니다. 예

log4net.GlobalContext.Properties["AppName"] = "..."; 

또는

log4net.ThreadContext.Properties["exceptionDetails] = "..."; 

변수 중 일부는 사용중인 응용 프로그램에 글로벌 따라서 한 번에 설정할 수 있습니다 될 수 있지만, exceptiondetails 설정해야

직전 log.Logger.Log하고 사용해야를 호출하는 GlobalContext는 아니고 ThreadContext

See here for more information on the various contexts

참고, 대신 사용할 수 있습니다 어떤 pre defined patterns있다. 예 : % exception 또는 % appdomain

관련 문제