首页 > 编程语言 >Java如何通过日志排查问题

Java如何通过日志排查问题

时间:2024-07-28 21:28:01浏览次数:14  
标签:Java String 排查 ThreadLocal key 日志 方法 public

问题:

大家有没有遇到过这样一种场景,在一个接口或者方法当中,业务逻辑很复杂,方法嵌套调用层级很深,此时要定位业务流程的走向,是不是要在每个方法中打日志,而这些日志是不串联的,比如,一个接口调用下来,程序没有报错,但没有按预期执行,怎么排查,就得翻这个方法调用时的每一条记录日志,而代码是并行执行的,程序中不可能只有这一个方法调用,那就会有其它日志夹杂在我们希望查看的日志中间。影响我们的定位。如何解决?

方法一:

最先想到的方法就是在这个方法的每个日志当中都加一个标志,这样通过日志来过滤不就可以了吗?这也许是一个方法,但在一个大方法里面,要在每一处记日志的地方都增加标记,一来繁琐,二来要在日志中定位也很麻烦。

方法二:

本文就提供一个使用Java中的ThreadLocal方法来记录日志的方案,大家知道ThreadLocal可以跨方法获取,只要在同一个线程当中执行,每个方法都可以获取ThreadLocal对象,Spring中的@Transactional注解就是通过ThreadLocal来存储数据源的,这里我们通过ThreadLocal来存储日志,在方法的最后,我们统一记录一条日志,在这一条日志当中,可以清楚地看到每一条记录的执行步骤。缺点就是在多线程当中会有问题。

下面我们看看是如何实现的。

package com.zhixinyi.job.common;

import com.zhixinyi.job.util.LogUtils;

import java.util.ArrayList;
import java.util.List;

public class TraceContext {
    private static class TraceContent {
        private String key;
        private String value;
        private long currentMills;

        public TraceContent(String key, String value) {
            this.key = key;
            this.value = value;
            this.currentMills = System.currentTimeMillis();
        }

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public String getValue() {
            return value;
        }

       

标签:Java,String,排查,ThreadLocal,key,日志,方法,public
From: https://blog.csdn.net/mjb709/article/details/140754646

相关文章

  • JavaScript图片轮播
    代码在文章最后面(含图片URL)实现功能按向左按钮图片显示上一张按向右按钮图片显示下一张每隔2000毫秒显示下一张图底部三个圆点显示当前的图片的编号实现流程初始化图片数组创建一个包含图片URL的数组,轮播时会通过这个数组来切换图片。创建当前索引变量 这个变量用来追踪......
  • 设计模式实战:日志系统的设计与实现
    问题描述设计一个日志系统,支持在应用程序中记录日志信息。系统需要确保日志记录器是唯一的实例,支持不同的日志记录方法(如文件、数据库),并且能够适配不同的日志格式(如JSON、XML)。设计分析单例模式单例模式确保一个类只有一个实例,并提供一个全局访问点。日志系统中的日志记......
  • 计算机毕业设计-基于Java+SSM架构的校园美食交流系统项目开发实战(附源码+论文)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • Java中的基本数据类型和引用数据类型
    目录前提介绍数据类型的作用数据类型的分类(1)基本数据类型(四类八种)(2)引用数据类型类(Class)接口(Interface)数组(Array)字符串(String)枚举(Enum)前提介绍java是一种强类型语言,这就意味着在编译的时候,所有的变量的数据类型都必须明确指定,并且类型系统会强制执行类型检查数据类型的作用在ja......
  • 三种语言实现浮点数二分(C++/Python/Java)
    题目给定一个浮点数......
  • javaEE(1)
    一.Web开发概述Web开发:指的是从网页中向后端程序发送请求,与后端程序进行交互Web服务器:是一种软件,向浏览器等Web客户端提供文档等数据,实现数据共享,它是一个容器,是一个连接用户和程序之间的中间键二.Web开发环境搭建我们要实现前后端交互,首先需要中间键Web服务器,......
  • Elasticsearch 入门实战(9)--Java API Client 使用二
    本文继续上文(Elasticsearch入门实战(5)--JavaAPIClient使用一(Index,Document,Ingest,SQLAPIs))介绍 JavaAPIClient,相关的环境及软件信息如下:CentOS 7.6.1810、Java1.8.0_341(客户端用)、Elasticsearch8.13.4、elasticsearch-java8.13.4。1、SearchAPIs1.1、Count......
  • Java-003
    集合进阶集合容器中只能存放对象,基本数据类型需要使用对应的包装类Collection单列集合collection集合体系collection常用方法packagecom.itheima.d1_collection;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.f......
  • Java入门
    day1入门常见的CMD命令打开cmd:win+R输入CMD按下回车键打开我的电脑:win+E盘符名称+冒号说明:盘符切换举例:E:(冒号为英文输入法)回车,表示切换到E盘dir说明:查看当前路径下的所有内容(该文件夹下的所有内容)cd目录说明:进入单级目录举例:cditheima特别说明:itheima(过长......
  • Java基础12:JavaDoc生成文档
    1.简介JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了。在简略介绍JavaDoc写法之后,再看一下在IntellijIdea中如何将代码中的注释生成HTML文档。JavaDoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代......