spring boot中默认继承了logback的日志配置。(pom中不需要另行引用logback的jar包)
- 配置application.properties
springboot默认使用classpath路径下的logback-test.xml配置文件,找不到该文件时,会访问logback.xml文件,此时不需要在application中进行补充配置。自定义logback配置文件名时需要在application.properties中
- # config logback
- logging.config=classpath:logback-spring.xml
- logging.level.root=info
logging.config是logback的配置路径
- 添加loaback的配置文件 logback-spring.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration debug="false">
- <!-- 此处引用springboot内含logback配置,可视情况是否保留 -->
- <include resource="org/springframework/boot/logging/logback/base.xml" />
- <!-- 应用名称 -->
- <property name="APP_NAME" value="dx" />
- <!--在当前目录下创建名为logs目录做日志存放的目录 -->
- <property name="LOG_HOME" value="/usr/local/logs/${APP_NAME}" />
- <!-- 日志输出格式 -->
- <property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n" />
- <!-- 控制台输出 -->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
- <Pattern>${ENCODER_PATTERN}</Pattern>
- </encoder>
- <!-- 生产环境添加如下配置,日志控制台只输出info级别日志 -->
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
- <!-- 按照每天生成日志文件 -->
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--日志文件输出的文件名-->
- <FileNamePattern>${LOG_HOME}/output.log.%d{yyyy-MM-dd}.log</FileNamePattern>
- <!--日志文件保留天数-->
- <MaxHistory>30</MaxHistory>
- </rollingPolicy>
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
- </encoder>
- <!--日志文件最大的大小-->
- <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>10MB</MaxFileSize>
- </triggeringPolicy>
- </appender>
- <!-- 错误日志:用于将错误日志输出到独立文件 -->
- <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log
- </fileNamePattern>
- <maxHistory>7</maxHistory>
- </rollingPolicy>
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>${ENCODER_PATTERN}</pattern>
- </encoder>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>WARN</level>
- </filter>
- </appender>
- <!-- 操作日志:用于将操作日志输出到文件 -->
- <appender name="OPERATE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${LOG_HOME}/operate.%d{yyyy-MM-dd}.log
- </fileNamePattern>
- <maxHistory>7</maxHistory>
- </rollingPolicy>
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>${ENCODER_PATTERN}</pattern>
- </encoder>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>DEBUG</level>
- </filter>
- </appender>
- <logger name="com.jobs.dao" level="DEBUG" addtivity="false">
- <appender-ref ref="OPERATE_FILE" />
- </logger>
- <logger name="logger.operate" level="DEBUG" addtivity="false">
- <appender-ref ref="OPERATE_FILE" />
- </logger>
- <!--myibatis log configure-->
- <logger name="com.apache.ibatis" level="TRACE"/>
- <logger name="java.sql.Connection" level="DEBUG"/>
- <logger name="java.sql.Statement" level="DEBUG"/>
- <logger name="java.sql.PreparedStatement" level="DEBUG"/>
- <!-- 日志输出级别 -->
- <root level="INFO">
- <appender-ref ref="STDOUT" />
- <appender-ref ref="FILE" />
- </root>
- </configuration>
代码中记录日志
- package com.jobs.controller;
- import javax.servlet.http.HttpServletResponse;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- import com.jobs.exception.ExceptionEnum;
- import com.jobs.exception.NoFoundExcepiton;
- import com.jobs.model.User;
- import com.jobs.service.UserService;
- @RestController
- @EnableAutoConfiguration
- @ComponentScan(basePackages={"com.jobs.model"})//添加的注解
- public class UserController {
- @Autowired
- private UserService userService;
- /**
- * 引入日志,注意都是"org.slf4j"包下
- */
- private final static Logger logger = LoggerFactory.getLogger(UserController.class);
- /**
- * 根据员工工号,查询员工
- * <p>Title: selectUser</p>
- * @author Liyan
- * @date 2018年1月11日 上午11:37:46
- * @param userId 员工工号
- * @param httpServletResponse
- * @return User
- * @throws Exception
- */
- @RequestMapping(value = "selectUser/{userId}",method = RequestMethod.GET)
- public User selectUser(@PathVariable String userId, HttpServletResponse httpServletResponse) throws Exception {
- User user = userService.selectUser(userId);
- logger.info("访问selectUser/{userId}接口,参数userId = " + "userId");
- if (user == null) {
- logger.error("根据员工工号,查询员工异常:e=" + ExceptionEnum.ERROR_NOFOUND.getValue());
- throw new NoFoundExcepiton(ExceptionEnum.ERROR_NOFOUND.getValue());
- }
- return user;
- }
- }