misc.log

日常茶飯事とお仕事と

log4netでSQL Serverにログを書く

log4netのAdoNetAppenderを使って、初めてSQL Serverにログを書き出してみました。

SQL Serverへのログ出力は、

  1. 設定情報に接続情報を記載する。
  2. ログテーブルにあわせたInsert文を記載する。可変項目(要するに各カラム、フィールド)の内容は、@で始まるパラメータとして記述する。
  3. 各パラメーターに具体的にどのような情報を設定するかを定義する。

というステップで設定します。Appender部分の定義例はこんな感じ。

  <appender name="DbLog" 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=192.168.0.11;initial catalog=TESTDB;integrated security=false;persist security info=True;User ID=sa;Password=sa_pass" />
    <commandText value="INSERT INTO ErrTbl ([PROCESS],[PROGRAM],[STATUS],[METHOD],[MESSAGE],[STACKTRACE]) VALUES (@process, @program, @status, @method, @message, @stack_trace)" />
    <parameter>
      <parameterName value="@process" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%appdomain" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@program" />
      <dbType value="String" />
      <size value="30" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%type" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@status" />
      <dbType value="String" />
      <size value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@method" />
      <dbType value="String" />
      <size value="100" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%method" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="2000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@stack_trace" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%exception" />
      </layout>
    </parameter>
  </appender>

「ConnectionType」は固定のようです。log4netが利用しているドライバ情報になっているのかな?

「conversionPattern」タグに記載する、log4netが持っている情報についてはここを見るとわかります。ざっくりですが。

log4net - PatternLayout Class
https://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html