簡體   English   中英

log4net AdoNetAppender未在Web應用程序中登錄sql azure db

[英]log4net AdoNetAppender not logging into sql azure db in web application

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

<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"));
    }

就我所知,所有這一切都無濟於事。

使用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>

根據您上面提供的信息,可能會出現一些問題。 為了更好地理解問題,需要更多信息。

我可以提供一些您可以驗證的檢查點:

  1. 你在哪里運行這個應用程序? 在計算模擬器或Windows Azure上
  2. 如果它運行到Compute Emulator,則在SQL Azure中設置防火牆以接受來自開發機器的連接,反之亦然(如果需要)。
  3. 如果此應用程序在Windows Azure中運行,您是否修改了防火牆策略
  4. 無論您何時運行此應用程序,您必須能夠首先證明與SQL Azure的連接是可能的,因為應用程序本身無法執行此操作,您必須設置環境以便與SQL Azure的連接正常工作
  5. 使用Log4Net,我總是做兩件事:
    1. 我總是先驗證我的Log4Net設置/代碼是否使用本地日志記錄工作
    2. 確認以上內容后,我跳轉到下一步並添加代碼/配置以更改到其他目標的日志記錄。
  6. 如果驗證了以上所有內容,則查找運行應用程序的網絡跟蹤(計算仿真器或Windows Azure),以獲取任何針對SQL Azure服務器的網絡數據。

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

在我解決這個問題的過程中,我發現Azure SQL表必須有一個CLUSTERED INDEX 基於標准日志表,這應該是它的外觀。

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)
)

看起來你需要編寫一個自定義的appender來完成這項工作

http://cloudshaper.wordpress.com/2010/10/30/logging-with-log4net-on-the-azure-platform/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM