2

log4net が情報やエラーを asp.net Web アプリケーションの SQL Azure db に記録しようとしましたが、成功も顕著なエラーもありませんでした。次のweb.configでADONetAppenderアペンダーを使用しようとしています:

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

私が知る限り、これはすべて何もしません。

4

5 に答える 5

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 キーは、log4net セクションではなく、web.config の appSettings セクションに配置する必要があります。例えば

...
</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>
于 2012-05-09T16:15:25.013 に答える
4

上記で提供した情報に基づいて、いくつかの問題が発生する可能性があります。問題をよりよく理解するには、より多くの情報が必要です。

確認できるいくつかのチェックポイントを提供できます。

  1. このアプリケーションはどこで実行しますか? コンピューティング エミュレーターまたは Windows Azure
  2. Compute Emulator で実行されている場合は、必要に応じて開発マシンからの接続を受け入れるように SQL Azure でファイアウォールをセットアップし、その逆も行います。
  3. このアプリケーションが Windows Azure で実行されている場合は、ファイアウォール ポリシーを変更しましたか?
  4. このアプリケーションをどこで実行する場合でも、最初に SQL Azure への接続が可能であることを証明できなければなりません。アプリケーション自体ではこれを実行できないためです。SQL Azure への接続が機能するように環境をセットアップする必要があります。
  5. Log4Net では、常に次の 2 つのことを行います。
    1. Log4Net 設定/コードがローカル ロギングを使用してファイルを動作させることを常に最初に確認します
    2. 上記が確認されたら、次のステップに進み、ログを別の宛先に変更するコード/構成を追加します。
  6. 上記のすべてが確認されたら、アプリケーションが実行されているネットワーク トレース (コンピューティング エミュレーターまたは Windows Azure) を探して、SQL Azure サーバーへのネットワーク データを探します。
于 2012-05-09T16:46:41.510 に答える
1

これを解決するための探求の中で、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)
)
于 2015-07-08T15:23:38.070 に答える
-1

仕事をするためにカスタムアペンダーを書く必要があるようです

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

于 2012-05-10T12:52:02.393 に答える