2012-05-09 66 views
2

我一直在試圖讓log4net將任何信息或錯誤記錄到我的asp.net web應用程序中的SQL Azure數據庫中,但沒有成功或發生任何明顯的錯誤。我試圖用下面的web.config中使用ADONetAppender附加目的地:log4net AdoNetAppender沒有登錄到Web應用程序中的SQL Azure數據庫

<configuration> 
    <configSections> 
    <section name="log4net" 
     type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" 
     /> 
    </configSections> 
    <log4net> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <appender name="AdoNetAppender" 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="Server=;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True" /> 
     <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) 
VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 

     <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@thread" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@log_level" /> 
     <dbType value="String" /> 
     <size value="50" /> 
     <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="4000" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@exception" /> 
     <dbType value="String" /> 
     <size value="2000" /> 
     <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="ADONetAppender" /> 
    </root> 
    </log4net> 

....

在我的Global.asax的Application_Start我打電話

void Application_Start(object sender, EventArgs e) 
      { 
       // Code that runs on application startup 
       log4net.Config.XmlConfigurator.Configure(); 


      } 

然後嘗試日誌:

readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (_logger.IsInfoEnabled) 
      _logger.Info("Performance sensitive Info message"); 
     _logger.Info("testing web role into Poqlogging"); 
     _logger.Error("new error",new Exception("new exception")); 
    } 

所有這一切都沒有做,只要我可以tel湖

回答

4

根據您上面提供的信息,有幾件事情可能會出錯。爲了更好地理解需要更多信息的問題。

我可以提供,你可以驗證一些檢查要點:

  1. ,你在哪裏運行此應用程序?在計算模擬器或Windows Azure上
  2. 如果它正在運行到計算仿真器中,請在SQL Azure中設置防火牆以接受來自開發計算機的連接,反之亦然(如果需要)。
  3. 如果此應用程序在Windows Azure中運行,您是否修改了防火牆策略
  4. 哪裏運行此應用程序,您必須首先證明可以連接到SQL Azure,因爲應用程序本身無法執行此操作,你就必須設置環境,以便連接到SQL Azure的工作
  5. 隨着log4net的我總是做兩件事情:
    1. 我始終確保第一,我的log4net的設置/代碼不使用本地日誌
    2. 工作文件一旦確認上述內容,我跳轉到下一步並添加代碼/配置以將記錄更改爲ot她的目的地。
  6. 如果以上所有內容都已通過驗證,那麼在SQL Azure服務器上查找任何網絡數據的應用程序運行時的網絡跟蹤(計算模擬器或Windows Azure)。
+0

Windows Azure SQL數據庫(以前稱爲SQL Azure)連接 字符串示例 以下示例顯示SQL數據庫 (以前稱爲SQL Azure)的連接字符串。 <添加名稱= 「的connectionStringName」 的providerName = 「System.Data.SqlClient的」 的connectionString =「數據 源= TCP:ServerName.database.windows.net,1433;初始 目錄=數據庫名;集成安全性= FALSE; User Id = username @ servername; Password = password; Encrypt = True; TrustServerCertificate = False; MultipleActiveResultSets = True「/> // TCP和端口給予麻煩 – Joe

4

使用log4net和SQL Azure是在Azure中執行應用程序日誌記錄的好方法。這裏有一些事情要嘗試:

1)您的連接字符串應該是這樣的:

<connectionString value="data source=ServerName;initial catalog=DBName;integrated security=false;persist security info=True;User ID=SQLUsername;Password=SQLPassword" /> 

2)applog4net.Internal.Debug關鍵應該在你的web.config的appSettings部分,不log4net部分。例如

... 
</configSections> 
<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 
<log4net> 
... 

3)將log4net內部調試消息寫入System.Diagnostics.Trace系統。在排除log4net配置問題時,我喜歡通過將以下內容添加到我的web.config中(請注意,您必須確保您的ASP.Net服務器進程可以寫入該文件),將跟蹤輸出重定向到文件:

<system.diagnostics> 
    <trace autoflush="true"> 
    <listeners> 
     <add 
     name="textWriterTraceListener" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="c:\temp\log4net.txt" /> 
    </listeners> 
    </trace> 
</system.diagnostics> 
+0

嘗試了一切,我發佈到azure的網站,仍然無法讓它插入日誌信息到SQL Azure。 – Kiddo

+0

您能夠生成內部調試跟蹤文件嗎?跟蹤文件會告訴你到底發生了什麼問題。 –

+0

當我在仿真器上運行時,它不會生成任何文件。 Azure – Kiddo

2

我同意; AdoNetAppender在上面的答案#2中指定連接時工作。另外,如果您遠離Azure SQL數據庫,請確保創建防火牆源IP規則以允許您的IP地址連接到Azure SQL數據庫。

1

在我的追求,以解決這個問題,我發現了一個藍色的SQL表MUST聚集索引。基於標準日誌表,這是它應該看起來的樣子。

CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL, 
[Date] [datetime] NOT NULL, 
[Thread] [varchar] (255) NOT NULL, 
[Level] [varchar] (50) NOT NULL, 
[Logger] [varchar] (255) NOT NULL, 
[Message] [varchar] (4000) NOT NULL, 
[Exception] [varchar] (2000) NULL, 
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ([Id] ASC) 
) 
+0

這對我有用。我忘了那件事。 –

相關問題