罗展丰
Published on 2025-07-18 / 180 Visits
0
0

日志使用教程


日志查看地址:http://192.168.168.207:31310/app/home#/

​​1 背景​

  • 传统日志分散在服务器docker容器中,无法查询历史日志,也难以集中检索和分析

  • 日志量庞大时,人工排查效率低,缺乏实时监控能力。

  • 缺乏统一的日志格式和存储方案,导致运维成本高。


​​2 配置步骤​

2.1 环境准备

1.framework、dme-sdk、mbm-mom-sdk 升级到 2.1.0

        <mbm.mom.framework.version>2.1.0-SNAPSHOT</mbm.mom.framework.version>
        <mom.sdk.api.version>2.1.0-SNAPSHOT</mom.sdk.api.version>
        <dme.sdk.verion>2.1.0-SNAPSHOT</dme.sdk.verion>

2.logback-spring.xml 配置 springProperty、appender、root

	<springProperty scope="context" name="redis.applicationName" source="spring.application.name" defaultValue="applicationName"/>
	<springProperty scope="context" name="redis.env" source="apilog.env" defaultValue="loc"/>

...

	<appender name="redis_log" class="com.sie.mbm.mom.framework.apilog.step.common.RedisAppender">
		<env>${redis.env}</env>
		<applicationName>${redis.applicationName}</applicationName>
	</appender>
...
	<root level="INFO">
		<appender-ref ref="redis_log"/>
		<appender-ref ref="console"/>
		<appender-ref ref="debug"/>
	</root>

3.pom 引入framework-apilog

        <dependency>
            <groupId>com.sie.mbm.mom</groupId>
            <artifactId>framework-apilog</artifactId>
        </dependency>

2.2 日志配置

2.2.1 开关

yml可以配置日志启用开关,注意:默认不打印返回值

apilog:
  interfaceFlag: true # 默认是true,是否打印接口日志,这个是总开关
  restApiFlag: true   # 默认是true,是否打印restTemplate日志,例如请求华为接口
  feignFlag: true     # 默认是true,是否打印openfeign调用日志
  responseFlag: false # 默认是false,是否打印返回值 
  inFlag: false       # 默认是false,是否打印接口进入的日志,可用于排查接口超时 

2.2.2 忽略日志的注解

@LogIgnore 这个注解下的不打印接口日志

2.2.3 异步线程

如果异步线程需要链路日志,需要在线程池加入任务 MdcAwareRunnable

@Configuration
@EnableAsync
public class TraceThreadPoolConfig {

    @Bean("traceTaskExecutor")
    public ThreadPoolTaskExecutor traceTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(150);
        executor.setQueueCapacity(100000);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("sie-traceTaskExecutor-");

        // 记录traceId
        executor.setTaskDecorator(MdcAwareRunnable::new);

        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}


3、日志收集​

3.1 收集原理

3.2 日志分类

3.2.1 接口日志

字段名

类型

说明

esLogTime

时间戳

日志记录的时间(Elasticsearch专用字段,用于排序和检索)

applicationName

字符串

应用名称(标识日志来源的微服务)

traceId

字符串

追踪ID

url

字符串

请求的URL地址

method

字符串

HTTP请求方法(如GET、POST)

isSuccess

布尔值

请求是否成功(true/false)

executionTime

数值(毫秒)

请求执行耗时

interfaceType

字符串

接口类型(业务api、微服务api、华为openApi、华为原子api、华为私有api 、赛意rdmApi)

header

字符串

请求头信息(可能包含认证、User-Agent等)

parameters

字符串

请求参数(如查询参数、表单数据)

errorMsg

字符串

错误消息(如果请求失败)

errorStack

字符串

错误堆栈信息(调试时使用)

userName

字符串

操作用户名(如果是用户触发的操作)

apiName

字符串

接口名称,@Operation 注解的内容

moduleName

字符串

模块名称,@Tag 的内容

parentId

字符串/数值

父日志ID(用于关联子日志,如分布式事务)

logId

字符串/数值

日志唯一ID(用于追踪单条日志)

可以按需添加筛选条件,例如过滤smt的日志;右上角可以筛选时间

3.2.2 全部日志

message 日志是业务平常打印的日志

3.2.3 切换环境


Comment