一、logback-spring.xml
<configuration> <!-- 屬性文件:在properties文件中找到對應的配置項 --> <springProperty scope="context" name="logging.path" source="logging.path"/> <springProperty scope="context" name="logging.level" source="logging.level.com.glmapper.spring.boot"/> <!-- 默認的控制檯日誌輸出,一般生產環境都是後臺啓動,這個沒太大作用 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern>%d{HH:mm:ss.SSS} %-5level %logger{80} - %msg%n</Pattern> </encoder> </appender> <appender name="GLMAPPER-CONTROLLER" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <!-- 如果命中就禁止這條日誌 --> <onMatch>DENY</onMatch> <!-- 如果沒有命中就使用這條規則 --> <onMismatch>ACCEPT</onMismatch> </filter> <file> ${logging.path}/glmapper-spring-boot/glmapper-controller.log </file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${logging.path}/glmapper-spring-boot/glmapper-controller.log.%d{yyyy-MM-dd}</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 錯誤日誌 appender : 按照每天生成日誌文件 --> <appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <!-- 過濾器,只記錄 error 級別的日誌 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>error</level> </filter> <!-- 日誌名稱 --> <file>${logging.path}/glmapper-spring-boot/glmapper-error.log</file> <!-- 每天生成一個日誌文件,保存30天的日誌文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌文件輸出的文件名:按天回滾 daily --> <FileNamePattern>${logging.path}/glmapper-spring-boot/glmapper-error.log.%d{yyyy-MM-dd}</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> <!-- 編碼 --> <charset>UTF-8</charset> </encoder> </appender> <!--打印日誌到glmapper-service.log的appender--> <appender name="GLMAPPER-SERVICE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <append>true</append> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${logging.level}</level> </filter> <file> ${logging.path}/glmapper-spring-boot/glmapper-service.log </file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${logging.path}/glmapper-spring-boot/glmapper-service.log.%d{yyyy-MM-dd}</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <logger name="com.example.demo.controller" level="${logging.level}" additivity="false"> <appender-ref ref="GLMAPPER-CONTROLLER" /> <appender-ref ref="ERROR-APPENDER" /> </logger> <!--此logger約束將.service包下的日誌輸出到GLMAPPER-SERVICE,錯誤日誌輸出到GERROR-APPENDE;GERROR-APPENDE見上面--> <logger name="com.example.demo.service" level="${logging.level}" additivity="false"> <appender-ref ref="GLMAPPER-SERVICE" /> <appender-ref ref="ERROR-APPENDER" /> </logger> <root level="${logging.level}"> <appender-ref ref="STDOUT"/> </root> </configuration>
二、application.properties
#設置應用的日誌級別 logging.level.com.glmapper.spring.boot=INFO #路徑 logging.path=./logs
三、TeacherController
package com.example.demo.controller; import com.example.demo.pojo.Teacher; import com.example.demo.service.TeacherService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TeacherController { private static final Logger LOGGER = LoggerFactory.getLogger(TeacherController.class); @Autowired private TeacherService teacherService; @RequestMapping("/getTeacherById") public Teacher getTeacherById(@RequestBody Teacher teacher){ LOGGER.info("我是TeacherController【INFO】teacher{}",teacher.toString()); LOGGER.error("我是TeacherController【ERROR】teacher{}",teacher.toString()); return teacherService.getTeacherById(teacher.getTid()); } }
四、TeacherServiceImpl
package com.example.demo.service.impl; import com.example.demo.controller.TeacherController; import com.example.demo.mapper.TeacherMapper; import com.example.demo.pojo.Teacher; import com.example.demo.service.TeacherService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class TeacherServiceImpl implements TeacherService { private static final Logger LOGGER = LoggerFactory.getLogger(TeacherServiceImpl.class); @Autowired private TeacherMapper teacherMapper; @Override public Teacher getTeacherById(Integer tid) { LOGGER.info("我是TeacherServiceImpl【INFO】--tid{}",tid); LOGGER.error("我是TeacherServiceImp【ERROR】---tid{}",tid); return teacherMapper.getTeacherById(tid); } }
五、項目結構