gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:37:04 27 4
gpt4 key购买 nike

我的数据库中有一个日志表,用于跟踪登录、注销、超时以及用户在登录时执行的操作。我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com