<
configuration
debug
="false"
>
<!--
输出到控制台
-->
<
appender
name
="console"
class
="ch.qos.logback.core.ConsoleAppender"
>
<
encoder
>
<
pattern
>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</
pattern
>
</
encoder
>
</
appender
>
<!--
输出到文件
-->
<
appender
name
="file"
class
="ch.qos.logback.core.rolling.RollingFileAppender"
>
<
rollingPolicy
class
="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<
fileNamePattern
>
logback.%d{yyyy-MM-dd}.log
</
fileNamePattern
>
</
rollingPolicy
>
<
encoder
>
<
pattern
>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</
pattern
>
</
encoder
>
</
appender
>
<
root
level
="info"
>
<
appender-ref
ref
="console"
/>
<
appender-ref
ref
="file"
/>
</
root
>
</
configuration
>
我们使用的是spring boot自带的logback所以pom文件不用做调整,只需要加上JPA相关代码即可。
controller的代码只是做一个简单的查询带参数:
@Transactional
public class FileController {
@Autowired
private FileRepository fileRepository;
@RequestMapping("getfile")
public String getOpinionBills() {
OpnFileDO one = fileRepository.getOne("14247");
return one.toString();
对它进行单元测试:
public class FileControllerTest extends ControllerTestBase {
@Test
public void fileTest() throws Exception {
mockMvc
.perform(MockMvcRequestBuilders.get("/getfile") // 测试的相对地址
.accept(MediaType.APPLICATION_JSON_UTF8) // accept response content type
.andExpect(status().isOk()) // 期待返回状态吗码200
.andDo(MockMvcResultHandlers.print()); // 打印返回的 http response 信息
测试代码也不重要,只是就是为了方便测试,运行测试:
这时的输出日志中是没有日志的。文件中也是没有的:
下面加sql日志,最简单的方法就是修改yml配置文件:
spring:
properties:
hibernate:
format_sql: true
#配置在日志中打印出执行的 SQL 语句信息。
show-sql: true
接下来,我们要在console中看到参数,并在日志文件中看到Sql和参数,修改logback配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 1. 输出SQL 到控制台和文件-->
<logger name="org.hibernate.SQL" additivity="false" >
<level value="DEBUG" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</logger>
<!-- <!– 2. 输出SQL 的参数到控制台和文件–>-->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false" level="TRACE" >
<level value="TRACE" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</logger>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
</configuration>
运行测试后发现:
14:06:54.130 [main] DEBUG org.hibernate.SQL -
select
opnfiledo0_.id as id1_0_0_
file opnfiledo0_
where
opnfiledo0_.id=?
Hibernate:
select
opnfiledo0_.id as id1_0_0_
file opnfiledo0_
where
opnfiledo0_.id=?
14:06:54.149 [main] TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [14247]
参数已经有了,但是Sql多打了一遍。
日志文件中则正常
14:06:54.130 [main] DEBUG org.hibernate.SQL -
select
opnfiledo0_.id as id1_0_0_
file opnfiledo0_
where
opnfiledo0_.id=?
14:06:54.149 [main] TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [14247]
我们把yml中的:show-sql: true
现在console中的日志和日志文件中的sql都正常了。
开发环境这样的配置没有问题,上生产后,我们的日志级别error怎么办:
不能修改logback的配置文件,只能修改yml配置文件:
logging:
level:
root: error