在早期的日志Slf4j+Log4j使用方式中,我们使用最多的就是LoggerFactory来获取一个Logger实例,logback的原理也一样。
目录
配置logback.xml
配置需要的propery属性
配置日志追加方式
配置日志级别
配置日志模板
logback 多日志文件操作
logback完整示例配置
Java日志工具类
系统启动日志示例
示例效果
日志按照级别阈值输出
这部分可以配置到logback.properties 需要开启扫描才行,下面是直接在logback.xml配置
配置appender标签包括文件生成规则,内容的输出规则等
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
注意:日志级别不区分大小写
logger的配置就是LoggerFactory需要的模板,只有配置了工厂获取才会生效。
根据前面介绍的一个完整配置示例
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-position-sync.%d{yyyy-MM-dd}.log
30
INFO
ACCEPT
DENY
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-event-sync.%d{yyyy-MM-dd}.log
30
INFO
ACCEPT
DENY
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-track-sync.%d{yyyy-MM-dd}.log
30
INFO
ACCEPT
DENY
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-file-sync.%d{yyyy-MM-dd}.log
30
INFO
ACCEPT
DENY
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-service-restart.%d{yyyy-MM-dd}.log
30
INFO
ACCEPT
DENY
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
日志枚举根据自己项目的需要进行自定义即可。
package com.patrol.beans.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Copyright: 2019-2021
* @FileName: LoggerUtils.java
* @Author: PJL
* @Date: 2020/9/8 10:34
* @Description: 日志管理工具
*/
public class LoggerUtils {
/**
* 打印到指定的文件下
*
* @param patrolLoggerType 日志文件类型
* @return
*/
public static Logger getLogger(PatrolLoggerType patrolLoggerType) {
return LoggerFactory.getLogger(patrolLoggerType.getLogFileName());
}
/**
* @Copyright: 2019-2021
* @FileName: PatrolLoggerType.java
* @Author: PJL
* @Date: 2020/9/8 10:10
* @Description: 巡护日志类型枚举
*/
public enum PatrolLoggerType {
/**
* 重启日志
*/
RESTART("RESTART_LOG"),
/**
* 实时位置
*/
POSITION("POSITION_LOG"),
/**
* 用户事件
*/
EVENT("EVENT_LOG"),
/**
* 用户轨迹
*/
TRACK("TRACK_LOG"),
/**
* 事件附件
*/
FILE("FILE_LOG");
private String logFileName;
PatrolLoggerType(String fileName) {
this.logFileName = fileName;
}
public String getLogFileName() {
return logFileName;
}
}
}
在Application启动类调用日志输出。
package com.patrol.mobile;
import com.patrol.beans.util.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.annotation.PostConstruct;
/**
* 开启异步请求
*/
@EnableAsync
/**
* 开启接口缓存
*/
@EnableCaching
/**
* 开启定时任务调度
*/
@EnableScheduling
/**
* 开启接口文档描述
*/
@EnableSwagger2
/**
* @SpringBootApplication
* 相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan
*/
@SpringBootApplication
public class PatrolMobileServiceApplication {
/**
* 系统重启日志输出(指定日志文件输出)
*/
@PostConstruct
public void printLog() {
Logger logger = LoggerUtils.getLogger(LoggerUtils.PatrolLoggerType.RESTART);
logger.info(">>>系统重启!");
}
public static void main(String[] args) {
SpringApplication.run(PatrolMobileServiceApplication.class, args);
}
}
logback配置需要用到filter配置为:ch.qos.logback.classic.filter.ThresholdFilter
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-position-sync.%d{yyyy-MM-dd}.log
30
INFO
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-event-sync.%d{yyyy-MM-dd}.log
30
INFO
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-track-sync.%d{yyyy-MM-dd}.log
30
INFO
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-file-sync.%d{yyyy-MM-dd}.log
30
INFO
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB
${LOG_HOME}/mobile-service-restart.%d{yyyy-MM-dd}.log
30
INFO
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} | %msg%n
100MB