# 自定义日志组件

# 💎 需求介绍

❄ slf4j-api-版本号中的Logger进行封装

❄ 引入变量level,通过改变level变量来控制日志输出,可以动态控制日志输出的级别

# 💎 引入maven 包

<dependency>
    <groupId>com.fast4cloud</groupId>
    <artifactId>framework-starter-logger</artifactId>
</dependency>
1
2
3
4

# 💎 当前依赖包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
1
2
3
4

slf4j-api在包spring-boot-starter-web内部依赖,如下:

img.png

# 💎 实际使用

# 引入当前组件

# 在yml中添加配置信息

# 日志等级配置
self:
  config:
    logger:
      # ERROR>WARN>INFO>DEBUG 当前打印日志等级
      level: DEBUG
1
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

# 实际使用

FastLogUtil.info("info日志");
FastLogUtil.info("输出信息:{}","我是输出");
FastLogUtil.info("输出信息:{},{}","我是输出1","我是输出2");
FastLogUtil.debug("debug日志");
FastLogUtil.debug("warn日志");
FastLogUtil.debug("error日志");
1
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
Last Updated: 10/1/2023, 10:26:44 PM