iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Java代码里正确的打日志
  • 765
分享到

怎么在Java代码里正确的打日志

2023-06-16 21:06:37 765人浏览 泡泡鱼
摘要

本篇内容主要讲解“怎么在Java代码里正确的打日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Java代码里正确的打日志”吧!打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通

本篇内容主要讲解“怎么在Java代码里正确的打日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Java代码里正确的打日志”吧!

打日志的正确方式

什么时候应该打日志

  1. 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。

  2. 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支

  3. 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程

基本格式

必须使用参数化信息的方式:

logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);

对于debug日志,必须判断是否为debug级别后,才进行使用:

if (logger.isDebugEnabled()) {     logger.debug("Processing trade with id: " +id + " symbol: " + symbol); }

不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。

反例(不要这么做):

logger.debug("Processing trade with id: " + id + " symbol: " + symbol);

使用[]进行参数变量隔离

如有参数变量,应该写成如下写法:

logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);

这样的格式写法,可读性更好,对于排查问题更有帮助。

不同级别的使用

ERROR:

基本概念

影响到程序正常运行、当前请求正常运行的异常情况:

  1. 打开配置文件失败

  2. 所有第三方对接的异常(包括第三方返回错误码)

  3. 所有影响功能使用的异常,包括:sqlException和除了业务异常之外的所有异常(RuntimeException和Exception)

不应该出现的情况:

比如要使用Azure传图片,但是Azure未响应

如果有Throwable信息,需要记录完成的堆栈信息:

log.error("获取用户[{}]的用户信息时出错",userName,e);

说明

如果进行了抛出异常操作,请不要记录error日志,由最终处理方进行处理:

反例(不要这么做):

try{     .... }catch(Exception ex){   String errORMessage=String.format("Error while reading information of user [%s]",userName);   logger.error(errorMessage,ex);   throw new UserServiceException(errorMessage,ex); }

WARN

基本概念

不应该出现但是不影响程序、当前请求正常运行的异常情况:

  1. 有容错机制的时候出现的错误情况

  2. 找不到配置文件,但是系统能自动创建配置文件

即将接近临界值的时候,例如:

缓存池占用达到警告线

业务异常的记录,比如:

当接口抛出业务异常时,应该记录此异常

INFO:

基本概念

系统运行信息

  1. Service方法中对于系统/业务状态的变更

  2. 主要逻辑中的分步骤

外部接口部分

  1. 客户端请求参数(REST/WS)

  2. 调用第三方时的调用参数和调用结果

说明

     1.并不是所有的service都进行出入口打点记录,单一、简单service是没有意义的(job除外,job需要记录开始和结束,)。

      反例(不要这么做):

public List listByBaseType(Integer baseTypeId) {      log.info("开始查询基地"); BaseExample ex=new BaseExample(); BaseExample.Criteria ctr = ex.createCriteria(); ctr.andIsDeleteEqualTo(IsDelete.USE.getValue()); Optionals.doIfPresent(baseTypeId, ctr::andBaseTypeIdEqualTo);    log.info("查询基地结束"); return baseRepository.selectByExample(ex);   }

       2.对于复杂的业务逻辑,需要进行日志打点,以及埋点记录,比如电商系统中的下订单逻辑,以及OrderAction操作(业务状态变更)。

       3.对于整个系统的提供出的接口(REST/WS),使用info记录入参

       4.如果所有的service为SOA架构,那么可以看成是一个外部接口提供方,那么必须记录入参。

       5.调用其他第三方服务时,所有的出参和入参是必须要记录的(因为你很难追溯第三方模块发生的问题)

DEBUG

基本概念

  1. 可以填写所有的想知道的相关信息(但不代表可以随便写,debug信息要有意义,***有相关参数)

  2. 生产环境需要关闭DEBUG信息

  3. 如果在生产情况下需要开启DEBUG,需要使用开关进行管理,不能一直开启。

说明

如果代码中出现以下代码,可以进行优化:

//1. 获取用户基本薪资  //2. 获取用户休假情况  //3. 计算用户应得薪资

优化后的代码:

logger.debug("开始获取员工[{}] [{}]年基本薪资",employee,year); logger.debug("获取员工[{}] [{}]年的基本薪资为[{}]",employee,year,basicSalary); logger.debug("开始获取员工[{}] [{}]年[{}]月休假情况",employee,year,month);  logger.debug("员工[{}][{}]年[{}]月年假/病假/事假为[{}]/[{}]/[{}]",employee,year,month,annualLeaveDays,sickLeaveDays,noPayLeaveDays); logger.debug("开始计算员工[{}][{}]年[{}]月应得薪资",employee,year,month);  logger.debug("员工[{}] [{}]年[{}]月应得薪资为[{}]",employee,year,month,actualSalary);

TRACE

基本概念

特别详细的系统运行完成信息,业务代码中,不要使用.(除非有特殊用意,否则请使用DEBUG级别替代)

规范示例说明

@Override @Transactional public void createUserAndBindMobile(@NotBlank String mobile, @NotNull User user) throws CreateConflictException{     boolean debug = log.isDebugEnabled();     if(debug){         log.debug("开始创建用户并绑定手机号. args[mobile=[{}],user=[{}]]", mobile, LoGobjects.toString(user));     }     try {         user.setCreateTime(new Date());         user.setUpdateTime(new Date());         userRepository.insertSelective(user);         if(debug){             log.debug("创建用户信息成功. insertedUser=[{}]",LogObjects.toString(user));         }         UserMobileRelationship relationship = new UserMobileRelationship();         relationship.setMobile(mobile);         relationship.setOpenId(user.getOpenId());         relationship.setCreateTime(new Date());         relationship.setUpdateTime(new Date());         userMobileRelationshipRepository.insertOnDuplicateKey(relationship);         if(debug){             log.debug("绑定手机成功. relationship=[{}]",LogObjects.toString(relationship));         }         log.info("创建用户并绑定手机号. userId=[{}],openId=[{}],mobile=[{}]",user.getId(),user.getOpenId(),mobile); // 如果考虑安全,手机号记得脱敏     }catch(DuplicateKeyException e){         log.info("创建用户并绑定手机号失败,已存在相同的用户. openId=[{}],mobile=[{}]",user.getOpenId(),mobile);         throw new CreateConflictException("创建用户发生冲突, openid=[%s]",user.getOpenId());     } }

到此,相信大家对“怎么在Java代码里正确的打日志”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么在Java代码里正确的打日志

本文链接: https://www.lsjlt.com/news/285138.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Java代码里正确的打日志
    本篇内容主要讲解“怎么在Java代码里正确的打日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Java代码里正确的打日志”吧!打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通...
    99+
    2023-06-16
  • 怎么正确用Java代码打日志
    这篇文章主要讲解了“怎么正确用Java代码打日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么正确用Java代码打日志”吧!使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志...
    99+
    2023-06-02
  • Java 程序如何正确地打印日志?
    在 Java 开发中,打印日志是一项非常重要的工作。正确的打印日志可以帮助我们快速定位问题,并提高代码的可维护性和可读性。本文将为大家介绍 Java 程序如何正确地打日志,希望对大家有所帮助。 一、为什么需要打印日志 在开发过程中,我们...
    99+
    2023-09-28
    java log4j apache 开发语言 docker
  • Django项目怎么正确配置日志
    这篇文章将为大家详细讲解有关Django项目怎么正确配置日志,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当Django项目正式部署上线后,我们需要设置DEBUG = False。这时开发者应怎样检查Dj...
    99+
    2023-06-14
  • 在日志中记录Java异常信息的正确姿势分享
    目录日志中记录Java异常信息遇到的问题原因分析正确的做法java异常在控制台和日志里面的打印记录1、e.printStackTrace()打印在哪里2、e.printStackTr...
    99+
    2024-04-02
  • 如何在Java应用程序中正确配置日志路径?
    作为一名Java程序员,日志是我们不可避免的一部分。正确的配置日志路径可以帮助我们更好地追踪问题和调试代码。在本文中,我们将探讨如何在Java应用程序中正确配置日志路径。 在Java中,我们通常使用Log4j或Logback来记录日志。这两...
    99+
    2023-10-17
    日志 教程 path
  • 怎么正确编制ADO.NET代码
    本篇内容介绍了“怎么正确编制ADO.NET代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1)打开VS2008,在“服务器资源管理器”下...
    99+
    2023-06-17
  • Node输出日志的正确方法是什么
    本篇内容主要讲解“Node输出日志的正确方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node输出日志的正确方法是什么”吧!背景每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助...
    99+
    2023-07-05
  • java日志打印怎么使用
    本篇内容介绍了“java日志打印怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介日志打印是java代码开发中不可缺少的重要一步...
    99+
    2023-06-26
  • java怎么打印堆栈日志
    在Java中,可以使用Thread.currentThread().getStackTrace()方法来获取当前线程的堆栈信息,并将...
    99+
    2023-10-23
    java
  • 想要在Java中正确设置日志路径?这篇教程是必看的!
    在Java应用程序中,日志是一个非常重要的组成部分。它可以帮助我们追踪应用程序的运行状态,定位问题和错误。但是,正确设置日志路径并不总是那么容易。在本文中,我们将介绍如何在Java中正确设置日志路径,以便您可以轻松地管理和查看应用程序的日...
    99+
    2023-10-17
    日志 教程 path
  • java判断时间格式是否正确的代码怎么写
    你可以使用 `SimpleDateFormat` 类来判断时间格式是否正确。下面是一个示例代码:```javaimport java...
    99+
    2023-10-12
    java
  • Java日志路径教程:快速掌握正确的设置方法!
    在Java开发中,日志是非常重要的,它可以记录应用程序的运行状态和异常信息,帮助开发人员快速定位问题。然而,如果日志路径设置不正确,会导致日志文件无法生成或者丢失,给开发人员带来很大的困扰。本文将介绍Java日志路径的设置方法,帮助读者快...
    99+
    2023-10-17
    日志 教程 path
  • Java和Git:如何在代码管理中选择正确的路径?
    Java 和 Git: 如何在代码管理中选择正确的路径? 在软件开发中,代码管理是非常重要的一部分。它可以帮助开发者们保持代码的可读性和可维护性,并且能够协同开发。Java 和 Git 是两种常用的工具,它们可以帮助开发者更好地管理代码。但...
    99+
    2023-07-03
    git 编程算法 path
  • 如何在Java应用程序中正确地使用重定向日志接口?
    在Java应用程序中,重定向日志接口是非常重要的一个功能。它可以帮助我们更好地管理应用程序的日志,以及确保日志信息能够被正确地保存和处理。在本篇文章中,我们将介绍如何在Java应用程序中正确地使用重定向日志接口。 一、重定向日志接口的基本概...
    99+
    2023-11-05
    重定向 日志 接口
  • Python 日志打包load,如何优化你的代码?
    日志是程序调试和排错中不可或缺的一部分。Python提供了强大的日志功能,能够帮助我们记录程序运行过程中的各种信息,便于我们后期分析和调试。在实际项目中,日志数据量通常会非常大,因此,我们需要对日志进行打包和压缩,以便于后期的处理和存储。...
    99+
    2023-10-29
    日志 打包 load
  • springboot2.0整合logback日志的代码怎么写
    这篇文章主要介绍“springboot2.0整合logback日志的代码怎么写”,在日常操作中,相信很多人在springboot2.0整合logback日志的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-29
  • crontab脚本错误日志怎么正确的输出写入到文件
    这篇文章主要介绍“crontab脚本错误日志怎么正确的输出写入到文件”,在日常操作中,相信很多人在crontab脚本错误日志怎么正确的输出写入到文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”crontab...
    99+
    2023-07-05
  • 怎么用java判断日期格式是否正确
    你可以使用SimpleDateFormat类来判断日期格式是否正确。以下是一个示例: import java.text.ParseE...
    99+
    2023-10-22
    java
  • 如何正确的在Java中使用日期与时间API
    这篇文章将为大家详细讲解有关如何正确的在Java中使用日期与时间API,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、时间和日期在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作