如何将不同业务模块产生的日志 分多文件记录

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何将不同业务模块产生的日志 分多文件记录

在项目中如果把所有的日志都记到一个 info.log 分析起来会很麻烦,中间夹着不同业务产生的日志,所以我们需要将不同的业务日志拆分到不同的文件中,便于日志分析。

一般日志文件的命名为:xxx.info.log 、xxx.error.log,如下图

一般 error 的日志我们重点关注。如果业务日志文件多了,找起来比较麻烦(当然也可以用 搜索 *.error.log)

我们在项目中会将 error 放在开头(也可以按文件夹来划分,比如将 api 建成一个文件夹)这样查找起来比较方便,如下图

在logback.xmp中,根据业务合理分析定义日志文件保存规则

 

然后再按 领域、业务,命名业务日志文件,如不同厂家的接口,可以命名为:api_厂商_业务_info.log ,


以下基于 LogBack 日志类实现的demo , LogBack 是 log4j 的升级版, 基于 slf4j 的实现,(log4j、slf4j、logback  是同一作者)

log4j2 是Apache 的产品,和 log4j 不是一个人写的。名字有点坑

 

代码如下

LogTests.java

package com.iron.demo;
import com.iron.demo.utility.LogFileName;
import com.iron.demo.utility.LoggerUtils;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LogTests {
    Logger LOG_API_HIS_PRESCRIPTION = LoggerUtils.Logger(LogFileName.LOG_API_HIS_PRESCRIPTION);
    Logger LOG_API_IRON_PRESCRIPTION = LoggerUtils.Logger(LogFileName.LOG_API_IRON_PRESCRIPTION);
    @Test
    public void testBusinessLog() throws Exception {
        LOG_API_HIS_PRESCRIPTION.info("HIS 接口产生的相关日志...");
        for (int i = 0; i < 5; i++) {
            LOG_API_IRON_PRESCRIPTION.info("Iron 设备相关的业务日志..."+i);
        }
        LOG_API_HIS_PRESCRIPTION.error("HIS 接口产生的【错误】日志...");
        LOG_API_IRON_PRESCRIPTION.error("Iron 接口产生的【错误】日志...");
    }
}

LogFileName.java

package com.iron.demo.utility;
public enum LogFileName {
    //配置到logback.xml中的logger name="apiHis"
    LOG_API_HIS_PRESCRIPTION("apiHis"),
    LOG_API_IRON_PRESCRIPTION("apiIron");
    private String logFileName;
    LogFileName(String fileName) {
        this.logFileName = fileName;
    }
    public String getLogFileName() {
        return logFileName;
    }
    public void setLogFileName(String logFileName) {
        this.logFileName = logFileName;
    }
    public static LogFileName getAwardTypeEnum(String value) {
        LogFileName[] arr = values();
        for (LogFileName item : arr) {
            if (null != item && item.logFileName == null && !(item.logFileName.trim().isEmpty())) {
                return item;
            }
        }
        return null;
    }
}

LoggerUtils.java【如果这个办不放其它该当,就是多余的类,可直接使用 LoggerFactory.getLogger 】

package com.iron.demo.utility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtils {
    /**
     * 传统默认的记录方式
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> Logger Logger(Class<T> clazz) {
        return LoggerFactory.getLogger(clazz);
    }
    /**
     * 记录到指定的文件下
     *
     * @param desc 日志文件名称
     * @return
     */
    public static Logger Logger(LogFileName desc) {
        return LoggerFactory.getLogger(desc.getLogFileName());
    }
}

logback.xml

点击查看  logback.xml 配置文件

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5月前
【云备份|| 日志 day6】文件业务处理模块
【云备份|| 日志 day6】文件业务处理模块
|
1月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
35 3
Golang语言之Prometheus的日志模块使用案例
|
1月前
|
Shell Python
salt自定义模块内使用日志例子
salt自定义模块内使用日志例子
logging 日志 模块
logging 日志 模块
|
2月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
2月前
|
数据挖掘 语音技术
3D-Speaker说话人任务的开源项目问题之语义说话人信息模块在说话人日志系统中的问题如何解决
3D-Speaker说话人任务的开源项目问题之语义说话人信息模块在说话人日志系统中的问题如何解决
|
2月前
|
存储 监控 Java
|
2月前
|
存储 安全 Python
[python]使用标准库logging实现多进程安全的日志模块
[python]使用标准库logging实现多进程安全的日志模块
|
3月前
|
存储 算法 开发工具
Etcd/Raft 原理问题之Etcd-Raft是什么
Etcd/Raft 原理问题之Etcd-Raft是什么
|
2月前
|
JSON 安全 Go
[golang]使用logrus自定义日志模块
[golang]使用logrus自定义日志模块