ssm整合logback日志
ssm环境搭建看着ssm整合
在resource
文件夹下创建logback.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义参数常量 -->
<!-- 日志级别 TRACE<DEBUG<INFO<WARN<ERROR -->
<!-- logger.trace("msg") logger.debug... -->
<property name="log.level" value="debug"/>
<property name="log.maxHistory" value="30"/>
<property name="log.filePath" value="F:/log"/>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level%logger{50} - %msg%n"/>
<!-- 控制台输出设置 -->
<appender name="consoleAppender"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG级别文件记录 -->
<appender name="debugAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/debug.log</file>
<!-- 滚动日志文件类型,就是每天都会有一个日志文件 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MMdd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/info.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="errorAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/error.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- cn.kongwg开头的日志对应形式 -->
<logger name="cn.kongwg" level="${log.level}" additivity="true">
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
</logger>
<!-- <root> 是必选节点,用来指定最基础的日志输出级别,只有一个level属性 -->
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
<!-- 捕捉sql开头的日志 -->
<appender name="MyBatis"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.filePath}/sql_log/mybatis-sql.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.filePath}/sql_log/mybatissql.log.%d{yyyy-MM-dd}</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%thread|%d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%logger{36}|%m%n
</pattern>
</encoder>
</appender>
<logger name="sql" level="DEBUG">
<appender-ref ref="MyBatis"/>
</logger>
</configuration>
- 在controller中添加方法(这里的slf4j是lombok插件的注解)
package cn.kongwg.controller;
import cn.kongwg.entity.Books;
import cn.kongwg.service.BookService;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author kongwg
* @create 2021-03-11 15:51
*/
@Controller
@RequestMapping("/book")
@Slf4j
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/hello")
@ResponseBody
public String hello() {
log.trace("this is trace");
log.info("this is info");
log.debug("this is debug");
log.warn("this is warn");
log.error("this is error");
bookService.findAllBook();
return "hello";
}
}
- 浏览器访问映射地址
控制台可以看见
2021-03-11 22:40:42.695 [http-nio-8080-exec-4] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'SpringMvc'
2021-03-11 22:40:48.315 [http-nio-8080-exec-4] INFO org.springframework.web.servlet.DispatcherServlet - Completed initialization in 5615 ms
2021-03-11 22:40:48.376 [http-nio-8080-exec-4] INFO cn.kongwg.controller.BookController - this is info
2021-03-11 22:40:48.377 [http-nio-8080-exec-4] DEBUGcn.kongwg.controller.BookController - this is debug
2021-03-11 22:40:48.377 [http-nio-8080-exec-4] WARN cn.kongwg.controller.BookController - this is warn
2021-03-11 22:40:48.377 [http-nio-8080-exec-4] ERRORcn.kongwg.controller.BookController - this is error
2021-03-11 22:40:48.606 [http-nio-8080-exec-4] WARN com.alibaba.druid.pool.DruidDataSource - removeAbandoned is true, not use in productiion.
2021-03-11 22:40:49.221 [http-nio-8080-exec-4] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
2021-03-11 22:40:49.239 [http-nio-8080-exec-4] DEBUGsql.cn.kongwg.dao.BookMapper.findAllBook - ==> Preparing: select bookID, bookName, bookCounts, detail from ssmbook.books
2021-03-11 22:40:49.489 [http-nio-8080-exec-4] DEBUGsql.cn.kongwg.dao.BookMapper.findAllBook - ==> Parameters:
2021-03-11 22:40:49.525 [http-nio-8080-exec-4] DEBUGsql.cn.kongwg.dao.BookMapper.findAllBook - <== Total: 4
- 本地文件可以看见
ssm整合pagehelper
- 添加依赖
<!--分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
- 在spring的配置文件中SqlSessionFactoryBean中添加拦截器(我这使用的是mysql)
<!--配置分页插件pagehelper的拦截器-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
业务编写
- service接口中添加
PageInfo<Books> pageBook(Integer pageNum, Integer pageSize);
- 在serviceImpl中添加实现
@Override
public PageInfo<Books> pageBook(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Books> allBook = bookMapper.findAllBook();
return new PageInfo<>(allBook);
}
- controller中添加(用@ResponseBody可以不走视图解析器)
@GetMapping("/page")
@ResponseBody
public String pageBook(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {
PageInfo<Books> booksPageInfo = bookService.pageBook(pageNum, pageSize);
String pageBook = JSON.toJSONString(booksPageInfo);
return pageBook;
}
-
结果
简单使用,详细使用可以看官方文档