1

log4jを使用して、データベース内のテーブルの1つに直接ログを記録するアペンダーがありました。アペンダーは次のとおりです。

 <appender name="DATABASE_LOG" class="org.apache.log4j.jdbc.JDBCAppender">
        <param name="URL" value="jdbc:postgresql://localhost/registrationdb" />
        <param name="Driver" value="org.postgresql.Driver"/>
        <param name="User" value="postgres"/>
        <param name="Password" value="********/>
        <layout class="org.apache.log4j.EnhancedPatternLayout">
            <param name="ConversionPattern" value="INSERT INTO user (user_id,creation_datetime,comment,user_type) VALUES ('%X{userId}','%d{yyyy-MM-dd HH:mm:ss}','%X{comment}','%X{userType}')"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="INFO" />
        </filter>
  </appender>

log4jは、JBoss4.2にデプロイされたWebアプリケーションの一部でした。log4jの問題は、開いているデータベース接続を閉じていなかったことと、WebサーバーでPostgresデータソースを試した場合でも、プール内のすべての接続を使い果たしていたことです(これはまったく別の問題です)。これが、LogBackを試して、それがさらに良いかどうかを確認することにした理由です。興味深いことに、LogBackのドキュメントを読んだとき、次のことが明確に示されていました。

DBAppenderは、Javaプログラミング言語に依存しない形式で3つのデータベーステーブルにロギングイベントを挿入します。

これらの3つのテーブルは、logging_event、logging_event_property、およびlogging_event_exceptionです。DBAppenderを使用する前に、これらが存在している必要があります。

私の理解では、これは、データベースにログを記録するためにこれら3つのテーブルにバインドされていることを意味します。

AppenderBaseインターネットで解決策を検索しても、この段階では不便なクラスの拡張を伴う結果はほとんど得られませんでした。これは、テストする要件が他にもたくさんあることを知っているので、さらにテストを行う必要があることを意味します。問題は、上記のlog4jアペンダーと機能が似ているLogBackのアペンダーを定義できますか?

あなたの助けは大歓迎です。

4

1 に答える 1

2

はい、ログバックには3つのデータベーステーブルが必要です。それらのいずれもスキップできません、名前をカスタマイズすることしかできません。これは実際には利点です。Log4Jは例外をまったくログに記録しませんでしたが、Logbackはスタックトレースラインに別のテーブルを使用します。プロパティ(3番目のテーブル)もログに記録します。

テーブル名や列名をカスタマイズする場合は、を実装できますDBNameResolver

于 2012-04-04T08:13:50.030 に答える