Spring Boot 中使用log4jdbc记录SQL的运行时参数
2016-05-14 12:24
896 查看
Spring Boot 中使用log4jdbc记录SQL的运行时参数
关于log4jdbclog4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.
在github上可以找到log4jdbc git的代码。
项目文件 结构
在appliaction.properties中添加必要的配置
spring.datasource.url = jdbc:log4jdbc:mysql://localhost:3306/springdemo?useUnicode=true&characterEncoding=UTF-8 # Username and password spring.datasource.username = test spring.datasource.password = **** spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy # =============================== # = JPA / HIBERNATE # =============================== # Use spring.jpa.properties.* for Hibernate native properties (the prefix is # stripped before adding them to the entity manager). # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update): with "update" the database # schema will be automatically updated accordingly to java entities found in # the project spring.jpa.hibernate.ddl-auto = update # Naming strategy spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # Allows Hibernate to generate SQL optimized for a particular DBMS spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
添加logback配置就文件
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <logger name="jdbc.connection" additivity="false" level="FATAL"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> <logger name="jdbc.resultset" additivity="false" level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> <logger name="jdbc.audit" additivity="false" level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> <logger name="jdbc.sqlonly" additivity="false" level="DEBUG"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> <logger name="jdbc.sqltiming" additivity="false" level="DEBUG"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> </configuration>
在Application中添加几条数据
public class SpringDemoApplication { @Autowired PlayerRepository playerRepository; @PostConstruct public void logSomething() { log.debug("Sample Debug Message"); log.trace("Sample Trace Message"); Player player = new Player("Lion", "Messi", 29); playerRepository.save(player); player = new Player("Luis", "Suárez Díaz", 29); playerRepository.save(player); player = new Player("Neymar", "Santos Júnior", 24); playerRepository.save(player); } public static void main(String[] args) { SpringApplication.run(SpringDemoApplication.class, args); } }
程序启动后可以看到日志输出
2016-05-14 13:16:38.127 INFO 2900 --- [ main] jdbc.audit : 10. Connec 4000 tion.setAutoCommit(false) returned Hibernate: insert into player (age, first_name, last_name) values (?, ?, ?) 2016-05-14 13:16:38.164 INFO 2900 --- [ main] jdbc.audit : 10. PreparedStatement.new PreparedStatement returned 2016-05-14 13:16:38.164 INFO 2900 --- [ main] jdbc.audit : 10. Connection.prepareStatement(insert into player (age, first_name, last_name) values (?, ?, ?), 1) returned net.sf.log4jdbc.PreparedStatementSpy@61bfc9bf 2016-05-14 13:16:38.166 INFO 2900 --- [ main] jdbc.audit : 10. PreparedStatement.setInt(1, 29) returned 2016-05-14 13:16:38.166 INFO 2900 --- [ main] jdbc.audit : 10. PreparedStatement.setString(2, "Lion") returned 2016-05-14 13:16:38.166 INFO 2900 --- [ main] jdbc.audit : 10. PreparedStatement.setString(3, "Messi") returned 2016-05-14 13:16:38.168 DEBUG 2900 --- [ main] jdbc.sqlonly : org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) 10. insert into player (age, first_name, last_name) values (29, 'Lion', 'Messi')
相关文件
PlayerRepository.java
@RepositoryRestResource(collectionResourceRel = "players", path = "players") public interface PlayerRepository extends PagingAndSortingRepository<Player, Long> { List<Player> findFirst10ByLastNameOrderByFirstNameDesc(String lastname, Sort sort); }
Player.java
@Entity @Data @RequiredArgsConstructor @NoArgsConstructor public class Player { @Id @GeneratedValue private Long id; @NonNull private String firstName; @NonNull private String lastName; @NonNull private Integer age; }
pom.xml
<project> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- http://mvnrepository.com/artifact/com.googlecode.log4jdbc/log4jdbc --> <dependency> <groupId>com.googlecode.log4jdbc</groupId> <artifactId>log4jdbc</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
相关文章推荐
- 详解Spring Boot Junit单元测试
- 详解Spring Boot 集成Shiro和CAS
- PHP Error与Logging函数的深入理解
- spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制
- 说一说Python logging
- Python logging模块学习笔记
- Python同时向控制台和文件输出日志logging的方法
- Python中使用logging模块打印log日志详解
- Python中logging模块的用法实例
- Python使用logging结合decorator模式实现优化日志输出的方法
- python logging类库使用例子
- Python中使用logging模块代替print(logging简明指南)
- Python日志模块logging简介
- python标准日志模块logging的使用方法
- 在django中使用logging模块
- Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS
- Tomcat 6.0 日志处理
- 说一说Python logging
- Python使用logging结合decorator模式实现优化日志输出的方法
- python logging 单例模式范例