2011-06-22 85 views
0

我已經找了一個「修復」我的問題幾天沒有,並沒有得到任何地方。基本上,發生的事情是我有一個應用程序寫入數據庫並通過log4Net發送電子郵件。Log4Net與.NET 4.0問題

這裏是我初始化我的日誌對象:

private static readonly log4net.ILog log; 
#endregion 

static PTSentryService() 
{ 
    // Initialize log4net. 
    log4net.Config.XmlConfigurator.Configure(); 
    log = log4net.LogManager.GetLogger(typeof(PTSentryService));   
} 

我然後使用LogHelper類搶配置信息,下面是我在我的web.config:

<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=ServerName;Initial Catalog=EventLog;Trusted_Connection=no;User ID=EventLogAdmin;Password=EVLA%dtm" /> 
    <commandText value="INSERT INTO EventLog ([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="4" /> 
    <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="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="(LOCL) PT Sentry" /> 
    <smtpHost value="group.com" /> 
    <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> 

發生什麼是ILog對象(isErrorEnabled等)中的所有屬性都是錯誤的。我知道這是由於配置沒有被正確加載,但是這是來自.Net 3.5項目的複製粘貼作業,我知道它的工作原理。爲了適應4.0,我需要做些什麼改變?

任何信息都非常好,謝謝!

+0

如果這是您的實際數據庫連接字符串,用戶名/密碼和所有......您可能希望對其進行編輯。 –

+0

@Jacob - 無法訪問數據庫(該代碼中不存在該信息)意味着知道用戶名和密碼幾乎是無用的。 –

+0

@Jacob,服務器是不同的,祝你好運,試圖使用這些creds :) –

回答

1

你可能想要做的是試着簡化你的配置,看看它是否是一個特定的appender或其他配置值導致這一點。也許拿出你的數據庫appender,看看它是否工作。

另外我之前遇到過這個問題,當我的引用文件夾被擡起。你可以在這裏查看SO文章:log4net not working in dll

我通常會看到的另一件事情是在調用configure之前實際聲明的記錄器。我懷疑這個問題,但只是把東西扔在那裏。

private static readonly log4net.ILog log = log = log4net.LogManager.GetLogger(typeof(PTSentryService)); 

static PTSentryService() 
{ 
    // Initialize log4net. 
    log4net.Config.XmlConfigurator.Configure(); 
} 

編輯:

除此之外,你可能想打開log4net的日誌記錄,看看你是否發現可疑內容。

+0

如何打開log4net日誌記錄? –

+1

+0

好吧,我發現問題是什麼,我是個白癡。我正在通過我的解決方案中的TEST項目進行所有這些測試,該解決方案沒有App.Config中的log4net配置部分。添加這一切使一切工作。 Yaaaay我 –