java - 将本地机器名放入 mySQL 表中

标签 java mysql jdbc log4j

我的数据库中有一个日志表,用于跟踪登录、注销、超时以及用户在登录时执行的操作。我的 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@ 等。我只是按照我被告知的去做。谁能提供一些帮助?谢谢。

最佳答案

我对 JDBCAppender 的 log4j 配置做了一些研究不幸的是,没有看到任何简单的方法来为主机名做这件事(即没有任何简单更改 log4j.xml 文件的方法)。

我没有找到 Hostname 的任何信息

  • 优先@PRIO@
  • 留言@MSG@
  • 时间戳@TIMESTAMP@

为你的 SQL

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

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

您可以考虑将主机名放入 MDC。这是其他人的例子 uses log4j JDBCAppender and put the user into the MDC .

祝你好运,希望对你有所帮助!

关于java - 将本地机器名放入 mySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750065/

相关文章:

java - 从java访问全局C变量

java - 使用插入排序修改快速排序

mysql - 使用 TFDConnection 以编程方式设置 "Server"

python - `alembic revision --autogenerate` 产生冗余外键迁移

mysql - Symfony 3.4 Doctrine : The association refers to the inverse side field which is not defined as association

mysql - 在 Eclipse 中单击按钮创建表

java - 添加错误页面会阻止 tomcat 7 中的所有 servlet

Java 线程 - 同步代码

java - DAO 层可以返回 JDBC ResultSet (Java)

java - 每个连接的 JDBC 语句/PreparedStatement