日志的理解 您所在的位置:网站首页 博人传在线看米粒 日志的理解

日志的理解

2023-09-06 10:15| 来源: 网络整理| 查看: 265

1.日志的定义:程序执行过程中,记录程序运行的情况的 信息

2.日志的作用: Log 日志,主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等,也有利于将这些信息进行持久化(如果不将日志信息保存到文件或数据库,则信息便会丢失)。

日志的3个注意点 1.日志级别 (程序运行哪种级别,日志才输出) 2.日志 输出的 目的地(控制台,持久化文件数据库,...) (日志信息 输出到哪,保存到哪) 3.日志信息的格式,日志输出的格式 这些一般是在配置文件中配置,日志依赖 会去 解析 xml文件,将数据 设置到自己的 类里面去,然后去操作

jdk3以前,system.println 去打印日志信息 打印日志信息,你可以简单的理解为,system.out输出,只是你可以输出在控制台,文件里,并且可以控制日志界别,让 此级别或 更高 级别的 日志打印,简单来说,还是得我们 自己去编写 打印日志的语句,以及配合 程序运行的级别的,自动日志打印,只要我们定了 日志级别,不管是程序打印的,还是我们自己写代码打印的,都只会打印这个日志级别及其以上的日志

关于日志 level 1.共有 8 个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF All:最低等级的,用于打开所有日志记录 Trace:是追踪,就是程序推进以下,你就可以写个 trace 输出,所以 trace 应该会特别多, 不过没关系,我们可以设置最低日志级别不让他输出 Debug:指出细粒度信息事件对调试应用程序是非常有帮助的 Info:消息在粗粒度级别上突出强调应用程序的运行过程 Warn:输出警告及 warn 以下级别的日志 Error:输出错误信息日志 Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志 OFF:最高等级的,用于关闭所有日志记录 2.程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少 项目中日志记录遵守哪些原则 1.注意日志级别,尤其是 info 和 error 不能用混。 2.注意记录信息的准确性,切记日志表达不清楚。 3.注意不同的代码段日志说明不能重复。 4.捕获异常后,要及时记录异常详细信息,并把异常传递到外部。 5.时刻铭记,日志的记录是为了后期查询问题带来方便,因此重要的代码务必要记录日志。

几个错误的打日志方式:

1.不要使用 System.out.print.. 输出日志的时候只能通过日志框架来输出日志,而不能使用 System.out.print… 来打印日志,这个只会打印到 tomcat 控制台,而不会记录到日志文件中,不方便管理日志,如果通过服务形式启动把日志丢弃了那更是找不到日志了。

2.不要使用 e.printStackTrace() 首先来看看它的源码:

public void printStackTrace() { printStackTrace(System.err); }

3.不要抛出异常后又输出日志 它其实也是利用 System.err 输出到了 tomcat 控制台 如捕获异常后又抛出了自定义业务异常,此时无需记录错误日志,由最终捕获方进行异常处理。不能又抛出异常,又打印错误日志,不然会造成重复输出日志。

try { // ... } catch (Exception e) { // 错误 LOG.error("xxx", e); throw new RuntimeException(); }

4.不要使用具体的日志实现类

5.没有输出全部错误信息 看以下代码,这样不会记录详细的堆栈异常信息,只会记录错误基本描述信息,不利于排查问题

try { // ... } catch (Exception e) { // 错误 LOG.error('XX 发生异常', e.getMessage()); // 正确 LOG.error('XX 发生异常', e); }

6.不要使用错误的日志级别 曾经在线上定位一个问题,同事自信地和我说:明明输出了日志啊,为什么找不到…,后来我去看了下他的代码,是这样的:

try { // ... } catch (Exception e) { // 错误 LOG.info("XX 发生异常...", e); }

大家看出了什么问题吗?用 info 记录 error 日志,日志输出到了 info 日志文件中了,同事拼命地在 error 错误日志文件里面找怎么能找到呢?

7.不要在千层循环中打印日志

这个是什么意思,如果你的框架使用了性能不高的 Log4j 框架,那就不要在上千个 for循环中打印日志,这样可能会拖垮你的应用程序,如果你的程序响应时间变慢,那要考虑是不是日志打印的过多了。

for(int i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有