【问题标题】:Spring Boot JDBC Template SQL LogSpring Boot JDBC 模板 SQL 日志
【发布时间】:2018-08-10 14:45:35
【问题描述】:

我正在尝试使用 Spring Boot JDBC 的参数记录 SQL 查询,但它没有在日志中打印详细信息。我使用的是 Spring Boot 1.5.8 版本。请帮我解决这个问题。

application.properties:

spring.datasource.url=url
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

logging.level.org.springframework.jdbc.core.JdbcTemplate=debug

spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=2

存储库:

@Repository
public class DataRepository {
    private static Logger log = LoggerFactory.getLogger(DataRepository.class);

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;

    public Data findDataObjet() throws Exception {

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("id1", "mike");
        parameters.put("id2", new Long(1));

        String sqlString = "select * from table1 where id1 = ":id" and id2 = :id2";
        log.info("Query:" + sqlString);//this log is printing

        Data extObj = jdbcTemplate.query(sqlString, parameters, (rs) -> {
            if (rs != null && rs.next()) {
                Data innerObj = new Data();
                innerObj.setName(rs.getString("name"));             
                return innerObj;
            } else {
                log.info("No records found:"+rs);
                return null;
            }
        });

        return extObj;

    }
}

logback-spring.xml:

<appender name="dailyRollingFileAppender"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${logsPath}DATA%d{MMddyyyy}.log
        </FileNamePattern>
        <maxHistory>4</maxHistory>
    </rollingPolicy>

    <encoder>
        <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
            %logger{35}-%msg %n</Pattern>
    </encoder>
</appender>
<root level="INFO">
    <appender-ref ref="dailyRollingFileAppender" />
</root>

【问题讨论】:

标签: java spring-boot log4j spring-jdbc


【解决方案1】:

试试

log4j.category.org.springframework.jdbc.core = TRACE

上述语句也将打印带有入站参数的 SQL 查询。

如果您只需要记录查询,请使用以下内容

log4j.category.org.springframework.jdbc.core = DEBUG

您可以在您的 logback 文件中启用以下内容

<logger name="org.springframework.jdbc.core.JdbcTemplate">
  <level value="debug" />
</logger>

<logger name="org.springframework.jdbc.core.StatementCreatorUtils">
  <level value="debug" />
</logger>

更新:对于 Springboot 2.x,它将是

logging.level.org.springframework.jdbc.core=TRACE

谢谢诸国伟!

【讨论】:

  • 我又创建了一个与此相关的问题,请回答,谢谢。stackoverflow.com/questions/49146167/…
  • 这种方式不适用于 spring boot 2.1.4 。应该是这样的:logging.level.org.springframework.jdbc.core=TRACE
  • @zhguuowei 我在控制台中没有看到任何sql语句被跟踪,把它放在application.yml文件logging.level.org.springframework.jdbc.core:TRACE
  • 这应该放在哪个文件名?我们正在使用 maven logging.level.org.springframework.jdbc.core=TRACE。
【解决方案2】:

从 Spring-Boot 2.1.x 开始,您必须设置属性: logging.level.org.springframework.jdbc.core=TRACE 记录语句和参数。

【讨论】:

    【解决方案3】:

    将以下内容添加到您的属性文件中也可以:

    logging.level.org.springframework.jdbc.core = TRACE
    

    【讨论】:

      【解决方案4】:

      在应用程序属性中尝试这些语句

      spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
      spring.jpa.properties.hibernate.format_sql = true
      
      logging.level.org.hibernate.SQL=DEBUG
      logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-30
        • 2022-10-20
        • 2018-03-15
        • 2015-08-14
        • 2012-12-15
        • 2016-08-01
        • 2015-08-24
        • 1970-01-01
        相关资源
        最近更新 更多