1

ログイン、ログアウト、タイムアウト、およびログオン中にユーザーが行ったことを追跡するログ テーブルがデータベースにあります。私の Java は、LOGGER.info(message) を実行するたびに、メッセージがテーブルの MESSAGE 列に入るように設定されています。

log4j.xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>
<appender name="db" class="org.apache.log4j.jdbcplus.JDBCAppender">
    <param name="connector" value="com.blahblahblah.jdbcplus.MySqlConnectionHandler" />
    <param name="sql"
    value="INSERT INTO LOG(LEVEL, MESSAGE, TIMESTAMP, HOST) VALUES ('@PRIO@', '@MSG@', '@TIMESTAMP@', 'Test')" />
    <layout class="org.apache.log4j.PatternLayout"></layout>
</appender>

<!-- Application Loggers -->
<logger name="com.blahblahblah.service.ZebraService">
    <level value="info" />
    <appender-ref ref="db" />
</logger>
<logger name="com.blahblahblah.service.ZplTemplateService">
    <level value="info" />
    <appender-ref ref="db" />
</logger>
<logger name="com.blahblahblah.service.MyService">
    <level value="info" />
    <appender-ref ref="db" />
</logger>
<logger name="com.blahblahblah.web.controller.ViewController">
    <level value="info" />
    <appender-ref ref="db" />
</logger>
<logger name="com.blahblahblah.security">
    <level value="info" />
    <appender-ref ref="db" />
</logger>

<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
    <level value="error" />
</logger>
<logger name="org.springframework.beans">
    <level value="error" />
</logger>
<logger name="org.springframework.context">
    <level value="error" />
</logger>
<logger name="org.springframework.web">
    <level value="error" />
</logger>
<logger name="org.springframework.web.servlet.DispatcherServlet">
    <level value="error" />
</logger>
<logger name="org.springframework.security">
    <level value="error" />
</logger>
<logger name="org.springframework.aop">
    <level value="error" />
</logger>
<logger name="org.springframework.ui">
    <level value="error" />
</logger>
<!-- Root Logger -->
<root >
    <priority value="error" />
    <appender-ref ref="console" />
</root>

これにより、LEVEL 列に「INFO」、MESSAGE 列にログイン/ログアウトに関する情報、TIMESTAMP 列にタイムスタンプ、HOST 列に「Test」が出力されます。

HOST 列をローカル マシン名にしたいと考えています。たとえば、私のコンピューターの名前は PC-1050 なので、そのコンピューターで何かをするたびに、HOST に「PC-1050」と言ってもらいたいと思っています。

@MSG@、@TIMESTAMP@ などのやり方がわかりません。言われたことに従っていただけです。誰でも助けてもらえますか?ありがとう。

4

1 に答える 1

1

私は log4j の構成についていくつか調査しましたが、残念ながら、ホスト名の簡単な方法 (つまり、ファイルJDBCAppenderへの単純な変更の行に沿ったものは何もありません) は見当たりませんでした。log4j.xml

次の行に沿ってホスト名の何も見つかりませんでした

  • 優先@PRIO@
  • メッセージ @MSG@
  • タイムスタンプ @TIMESTAMP@

あなたのSQLのために

INSERT INTO LOG(LEVEL, MESSAGE, TIMESTAMP, HOST) VALUES  
('@PRIO@', '@MSG@', '@TIMESTAMP@', 'Test')

また、Hostname のPatternLayout に関する log4j ドキュメントには何も表示されませんでした。log4j JDBCAppender にマクロがあれば、PatternLayout の変換文字に相当すると思います。

ホスト名を MDC に入れることを検討できます。これは、 log4j JDBCAppender を使用し、ユーザーを MDC に入れる他の誰かの例です。

頑張ってください、これが役に立てば幸いです!

于 2012-12-06T20:40:11.243 に答える