0

log4net 経由で DB にログを記録する際に問題が発生しました。

  • ユーザーにはデータベースに挿入する権限があります
  • 同じ挿入ステートメントが Management Studio で機能する
  • log4net はファイルにログを記録しますが、DB には記録しません
  • 接続文字列が正しい (他のアプリケーションでも同じ)

次の構成を取得しました。

<log4net debug="true">
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="Logs\JallaJalla (%date{yyyyMMdd HHmmss}).log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %logger %-5level - %message%newline" />
        </layout>
    </appender>

    <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
        <threshold value="DEBUG"/>
        <bufferSize value="1" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;" />
        <commandText value="INSERT INTO [log].[tLogTable] ([Message],[Level]) VALUES (@message, @log_level)" />

        <parameter>
            <parameterName value="@message" />
            <dbType value="String" />
            <size value="4000" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>

        <parameter>
            <parameterName value="@log_level" />
            <dbType value="String" />
            <size value="50" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>

    </appender>

    <logger name="ADONetAppender">
        <level value="ALL" />
        <appender-ref ref="ADONetAppender" />
    </logger>

    <logger name="FileLogger">
        <level value="ALL" />
        <appender-ref ref="FileAppender" />
    </logger>
</log4net>

DB の 2 つの列は次のとおりです。

  • メッセージ varchar(max) が null ではありません
  • レベル varchar(50) が null ではない

ありがとう!

4

2 に答える 2

0

私は自分で問題を見つけました...

private static readonly ILog Logger = LogManager.GetLogger( "FileLogger" );

ロガーの名前は「FileLogger」に設定されていたので、追加することで

<appender-ref ref="ADONetAppender" /> 

中身

<logger name="FileLogger">
    <level value="ALL" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="ADONetAppender" /> 
</logger>

問題を解決しました!

とにかくありがとう!

于 2012-12-12T11:54:11.787 に答える
0

ログを有効にしたいアセンブリに以下を追加するのを忘れていたと思います:

[assembly: log4net.Config.XmlConfigurator()]

またはコードから:

log4net.Config.XmlConfigurator.Configure();
于 2012-12-12T10:13:27.867 に答える