将本地计算机名称放入mySQL表

时间:2012-12-06 18:24:57

标签: java mysql jdbc log4j

我的数据库中有一个日志表,用于跟踪登录,注销,超时以及用户登录时的操作。设置了我的Java,以便每次进行LOGGER.info(消息)时,消息都会进入我表的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 @等等。我只是按照我的要求去做。有人可以提供一些帮助吗?感谢。

1 个答案:

答案 0 :(得分:1)

我对JDBCAppender的log4j配置进行了一些研究,遗憾的是没有看到任何简单的方法(对于log4j.xml文件的简单更改)。

我没有找到任何关于主机名的内容

  • 优先级@PRIO @
  • 消息@MSG @
  • 时间戳@TIMESTAMP @

用于

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

另外,我在log4j documentation on PatternLayout中没有看到Hostname的任何内容。我认为如果在log4j JDBCAppender中有一个宏,它将对应于PatternLayout中的转换字符。

您可以查看将主机名放入MDC。以下是uses log4j JDBCAppender and put the user into the MDC

的其他人的示例 祝你好运,希望这会有所帮助!