日志框架
- log4j
- logback
- jdk logging
slf4j 日志门面 具体的实现有上面的3种形式
方便日后更换日志
仓库地址
https://mvnrepository.com/ ----搜索slf4j
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
controller.java
//logback
public static void main(String[] args) {
//用户字符串或当前类的名字
Logger logger = LoggerFactory.getLogger(controller.class);
//五种日志级别
logger.trace("trace"); //2020-11-11 11:01:30.169 【main】 TRACE com.example.util.controller - trace
logger.debug("debug"); //debug
logger.info("info"); //info
logger.warn("warn"); //warn
logger.error("error"); //error
logger.info("hello {}","aaa"); //hello aaa
}
Log4j建议只使用四个级别(从高到低)
ERROR: 错误的简短描述,和该错误相关的关键参数,如果有异常,要有该异常的StackTrace。
WARN: 告警的简短描述,和该错误相关的关键参数,如果有异常,要有该异常的StackTrace。
INFO: 言简意赅地信息描述,如果有相关动态关键数据,要一并输出,比如相关ID、名称等。
DEBUG: 简单描述,相关数据,如果有异常,要有该异常的StackTrace。
<configuration>
//追加appender ConsoleAppender输出至命令行
<appender name="mySTDOUT" class="ch.qos.logback.core.ConsoleAppender">
//把日志记录成什么格式
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} 【%thread】 %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="myFILE" class="ch.qos.logback.core.FileAppender">
<file>./logs/mytest2.log</file>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} 【%thread】 %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
//指定输出到哪个级别
<root level="trace">
<appender-ref ref="mySTDOUT"></appender-ref>
<appender-ref ref="myFILE"></appender-ref>
</root>
</configuration>
private static final Logger log = LoggerFactory.getLogger(ApiSetController.class);
@ApiOperation(value = "接口文档下载")
@GetMapping(value = "/download")
public ResponseEntity<Object> downloadCourseFile() {
Path path = Paths.get("");
org.springframework.core.io.Resource resource = new UrlResource(path.toUri());
if (!resource.exists() && !resource.isReadable()) {
throw new BaseException("文件不存在或者读取异常");
}
String filename = "接口数据集接口文档.docx";
try {
filename = URLEncoder.encode(filename, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage(), e);
}
return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attchement;filename=" + filename)
.header("Access-Control-Expose-Headers", "Content-Disposition")
.body(resource);
}