# 自定义日志组件
# 💎 需求介绍
❄ slf4j-api-版本号中的Logger进行封装
❄ 引入变量level,通过改变level变量来控制日志输出,可以动态控制日志输出的级别
# 💎 引入maven 包
<dependency>
<groupId>com.fast4cloud</groupId>
<artifactId>framework-starter-logger</artifactId>
</dependency>
1
2
3
4
2
3
4
# 💎 当前依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1
2
3
4
2
3
4
slf4j-api在包spring-boot-starter-web内部依赖,如下:

# 💎 实际使用
# 引入当前组件
# 在yml中添加配置信息
# 日志等级配置
self:
config:
logger:
# ERROR>WARN>INFO>DEBUG 当前打印日志等级
level: DEBUG
1
2
3
4
5
6
2
3
4
5
6
# 通用方法封装工具类
@Slf4j
@Configuration
public class FastLogUtil {
public static String level;
@Bean(name = "getFastLoggerProperties")
//@ConditionalOnMissingBean
public FastLoggerProperties getFastLoggerProperties() {
return new FastLoggerProperties();
}
@Bean(value = "FastLogUtil2")
public void setLevel() {
try {
FastLogUtil.level = getFastLoggerProperties().getLogger().getLevel();
} catch (Exception e) {
log.warn("self.config.logger.level未配置,默认设置为INFO");
FastLogUtil.level = "INFO";
}
}
/**
* 日志记录 可以按级别控制输出
*
* @param format
* @param level1
* @param arguments
*/
private static void logOutPut(String format, Level level1, Object... arguments) {
if (StringUtils.equals(level1.toString(), Level.ERROR.toString())) {
if (level1.toInt() >= changeLevel2Int(level)) {
log.error(format, arguments);
}
} else if (StringUtils.equals(level1.toString(), Level.WARN.toString())) {
if (level1.toInt() >= changeLevel2Int(level)) {
log.warn(format, arguments);
}
} else if (StringUtils.equals(level1.toString(), Level.INFO.toString())) {
if (level1.toInt() >= changeLevel2Int(level)) {
log.info(format, arguments);
}
} else if (StringUtils.equals(level1.toString(), Level.DEBUG.toString())) {
if (level1.toInt() >= changeLevel2Int(level)) {
log.debug(format, arguments);
}
}
}
private static int changeLevel2Int(String level) {
int i = 0;
if (StringUtils.equals(level, Level.ERROR.toString())) {
i = Level.ERROR.toInt();
} else if (StringUtils.equals(level, Level.WARN.toString())) {
i = Level.WARN.toInt();
} else if (StringUtils.equals(level, Level.INFO.toString())) {
i = Level.INFO.toInt();
} else if (StringUtils.equals(level, Level.DEBUG.toString())) {
i = Level.DEBUG.toInt();
}
return i;
}
/**
* info等级日志输出
*
* @param format
* @param arguments
*/
public static void info(String format, Object... arguments) {
logOutPut(format, Level.INFO, arguments);
}
public static void debug(String format, Object... arguments) {
logOutPut(format, Level.DEBUG, arguments);
}
public static void warn(String format, Object... arguments) {
logOutPut(format, Level.WARN, arguments);
}
public static void error(String format, Object... arguments
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 实际使用
FastLogUtil.info("info日志");
FastLogUtil.info("输出信息:{}","我是输出");
FastLogUtil.info("输出信息:{},{}","我是输出1","我是输出2");
FastLogUtil.debug("debug日志");
FastLogUtil.debug("warn日志");
FastLogUtil.debug("error日志");
1
2
3
4
5
6
2
3
4
5
6
# 动态修改level值
//level默认是info配置
// 通过自己项目封装相关接口来修改日志控制等级
/**
* 修改日志等级
* @return
*/
@PostMapping("/changeLogLevel")
@ApiOperation("修改日志等级")
public BaseRespDto changeLogLevel(String level) {
FastLogUtil.level = level;
return new BaseRespDto().success();
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12