当前位置: 首页 > 知识库问答 >
问题:

如何使用log4j2在日志文件中记录Spring JdbcTemplate sql查询和DB响应

蔡理
2023-03-14

我正在使用Springorg.springframework.jdbc.core.JdbcTemplate和org.springframework.jdbc.core.simple.SimpleJdbcCall进行数据库查询。我正在使用log4j2.xml进行日志记录。我想将所有sql查询及其数据库结果记录在db.log文件中。

我尝试在log4j2.xml文件中使用以下记录器,但它没有在db中记录任何内容。日志文件。我尝试了level=“TRACE”和level=“debug”,但都不起作用。

    <RollingFile name="db" fileName="${sys:catalina.home}/logs/db.log"
        filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/db-%d{yyyy-MM-dd}-%i.log.gz">
        <PatternLayout
            pattern="%d{dd/MM/yyyy HH:mm:ss,SSS} [%X{cartID}] [%X{sessionId}] [%p] [%t] [%c] (%F:%L)  - %m%n" />
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />
            <SizeBasedTriggeringPolicy size="10 MB" />
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Logger name="org.springframework.jdbc.core.JdbcTemplate" level="TRACE" additivity="false">
        <Appender-Ref ref="db" />
    </Logger>

在我们的java类中,我们使用以下sql

String sQuery = "select count(*) from impersonation_requests where ir_eid = ? and  ir_tmp_userid = ?";
String value =  template
                .queryForObject(sQuery, new Object[] { passwordInfo.getEid(),
                        passwordInfo.getUserId() }, String.class);

这里 var 模板是组织的实例变量

我想在我的db.log文件中看到sQuery和值条目。我们可以使用JdbcTemplate实现这一点吗?或者我需要在我所有的DAO类中实现记录器,并在我使用JdbcTemplate的每个类中记录sQuery和值。我想避免这种方法。请建议。

共有2个答案

田志
2023-03-14
<Logger name="org.springframework.jdbc.core.JdbcTemplate" level="TRACE" additivity="false">
      <Appender-Ref ref="db" />
</Logger>

这肯定行得通。调试和跟踪两个级别都可以。唯一的问题是JDBCTemplate使用通用日志API进行日志记录。如果您在应用程序中使用log4j,则必须为其添加通用日志记录桥。

在您的pom.xml中添加以下内容

 <dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-jcl</artifactId>
     <version>2.0-rc1</version>
 </dependency>
冯枫
2023-03-14

我会说名称=“组织Spring框架.jdbc.core.Jdbc模板”是非常“严格的”。试试这个类别:

org.springframework.jdbc
 类似资料:
  • 我试图从log4j1更改为log4j2。我所做的: 已删除旧配置文件log4j。xml 创建了新的配置文件log4j2。xml 创建了jboss部署结构。xml 编辑的pom 环境:野蝇10 1 EAR 4 WAR文件中没有使用web.xml。以前的log4j配置日志在EAR中(仅) Log4j2配置文件 Jboss部署结构 新的maven依赖关系 我之前说过我在SLF4j中使用log4j1。这些

  • 如果我在application.properties文件中指定“Logging.config=src/main/resources/log4j2.properties”,日志记录就可以正常工作。 spring boot自动检测log4j2.properties而不需要在application.properties文件中指定“logging.config=src/main/resources/log

  • 我使用Spring Boot和log4j2进行日志记录,因为我希望日志写在文件上而不是控制台上。所以我实现了log4j2.properties并将其保存在Spring Boot项目的资源文件夹下。

  • 问题内容: 我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,如下所示的Java代码: 虽然我怎么知道发送到elasticssearch服务器的原始http查询?我如何启用日志记录,我尝试添加log4j,但是似乎spring-data- elasticsearch没有记录查询。 问题答案: 我没有针对Spring Data Elastics

  • 我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,java代码如下: 然而,我如何知道发送到elasticssearch服务器的原始http查询?如何启用日志记录,我尝试添加log4j,但spring数据elasticsearch似乎没有记录查询。

  • 我正在为日志创建一个Spring Bootjar。我在我的主要spring boot项目中添加了这个依赖项。我可以在主项目的控制台中获取日志。但是没有登录到文件中。 我在文件中添加了以下application.yml 谁能帮我一下吗。提前谢谢!