Java日志的使用与配置
一.什么是日志框架
- 一套能实现日志输出的工具包
- 能够描述系统运行状态的所有时间都可以算作日志
- 如记录用户下线、接口超时、数据库崩溃等
二.日志框架的能力
- 定制输出目标
- 定制输出格式
- 携带上下文信息
- 运行时选择性输出
- 灵活的配置
- 优异的性能
三.常见日志框架
-
日志框架与日志实现
-
日志门面是日志实现的抽象层,这样一来日志实现层进行代码的改动,不影响用户使用日志时调用的接口
日志门面 日志实现 JCL Log4j SLF4j Log4j2 jboss-logging Logback JUL 实际开发中,使用一个抽象层日志门面+日志实现,SpringBoot中默认选择的搭配是:SLF4j+Logback
四.常规日志的使用(SpringBoot为例)
-
普通方式
1
2
3
4
5
6
7
8
9
10
11
12
13
public class LoggerTest {
private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); //一定要写当前的类
public void test1(){
logger.debug("debug...");
logger.info("info...");
logger.error("error...");
}
} -
简便方式
1
2
3
4
5<!--添加日志工具依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class LoggerTest {
//private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); //一定要写当前的类
public void test1(){
log.debug("debug...");
log.info("info...");
log.error("error...");
}
}
//注意:若添加lombok依赖且加入Slf4j注解后无法识别log方法,在idea中Settings中设置Plugins,在Marketplace中搜lombok插件并安装即可 -
日志中输出变量
1
2
3
4
5String name = "张同学";
String password = "515Club";
log.info("name:{}, password:{}",name,password);
//注意:{}中不要带空格 -
常用日志级别
级别由高到低 描述 ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。 WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。 INFO 打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。 DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。 TRACE 很低的日志级别,一般不使用 注:在一般程序开发中,通常区分并打印ERROR与INFO两个级别的日志
五.Logback的配置
-
第一种方式——application.yml中配置
1
2
3
4
5
6logging:
pattern:
console: "%d = %msg%n"
# path: var/log/tomcat/ 配置文件路径
file: var/log/tomcat/sell.log
level: debug -
第二种方式——在logback-spring.xml中配置(推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!--配置日志输出格式 %d为日期,%msg为日志信息,%n为换行-->
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--过滤高级别日志,有DENY/NEUTRAL/ACCEPT三种过滤机制-->
<level>ERROR</level>
<onMatch>DENY</onMatch> <!--匹配该level进行的操作-->
<onMismatch>ACCEPT</onMisMatch> <!--不匹配该level进行的操作-->
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>var/log/tomcat/sell/info.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--配置日志级别,该级别以上的日志都会被打印-->
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>var/log/tomcat/sell/error.%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>注意:此文件配置时没有人性化提示,务必检查标签拼写问题!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 515code-实验室!
评论