头两天领导分配个任务是要把项目中所有try catch里的异常处理收集到elk中,由于之前的处理方式五花八门,就集中处理了下, 事后还被批评了。

不是所有的异常信息都需要被记录到log中

使用SLF4J

  1. 使用门面模式的日志框架,有利于维护各个类的日志处理方式的统一。
  2. 实现方式的统一使用,使用logback框架。

什么时候应该打日志?

  1. 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志来定位问题所在的。
  2. 当你碰到if..else或者switch这样的分支的时候,可以在首行打印日志,用来确定进入了那个分支。
  3. 经常以功能为核心进行开发的时候,可以在提交代码前,通过日志看到整个流程。

基本格式

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

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

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

不过不建议这样做。因为上面的代码涉及到了字符串的拼接, 会产生很多String对象,占用空间,影响程序性能。

可以使用 [{}] 进行参数的隔离

如果有参数变量,可以写成下面这样:

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

不同级别的使用

ERROR

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

  1. 打开配置文件失败
  2. 对接第三方的异常(包括第三方返回错误码)
  3. 所有影响功能使用的异常。包括sqlException和除了业务异常之外的所有异常(runtimeException,Ecxception)

如果抛出了异常,就不要记录error日志,有最终处理方式进行处理。

如下图:

WARN

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

  1. 有容错机制的时候出现的错误情况
  2. 找不到配置文件,但是程序可以自动创建或者能够继续向下执行
  3. 缓存池占用接近临界值的时候
  4. 接口抛出业务异常的时候

INFO

定义:系统运行信息,外部接口

  1. service中对于系统/业务状态的变更
  2. 主要逻辑分步骤
  3. 客户端请求参数
  4. 调用第三方的调用参数和调用结果

这里同样也是要有所抉择的,普通简单service是没有意义的。不是针对每个业务都这样做,

这里对于复杂的业务逻辑,例如电商系统中的下订单逻辑,工业系统的停送电逻辑等等

DEBUG

定义:可以填写想知道的相关信息,最好有相关参数,生产环境需要关闭debug,如果需要开启的话,需要使用开关进行管理,不能一直开启

TRACE

定义:特别详细的系统运行信息。业务代码中,不要使用(除非有特殊用意,否则用debug代替)

trace的级别比debug还要低一些,并且会自动检查级别,如果高于trace就跳过。

而debug是先生产要打印的语句,然后再检查级别。如果高于debug就不输出

所以要debug进行判断,否则会生成多余的对象。

slf4j的正确使用的更多相关文章

  1. Java 日志管理最佳实践

    转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...

  2. Java日志记录的5条规则

    日志记录是在软件开发过程中常常需要考虑的关键因素. 当产品运行出错时,日志文件通常是我们进行错误分析的首要选择. 而且,在很多情况下,它们是我们手上唯一可以用来查明发生状况和问题根本原因的信息. 可见 ...

  3. lombok使用教程

    Lombok介绍.使用方法和总结https://www.cnblogs.com/heyonggang/p/8638374.html Lombok简介.使用.工作原理.优缺点https://www.ji ...

  4. SLF4j 居然不是编译时绑定?日志又该如何正确的分文件输出?——原理与总结篇

    各位新年快乐,过了个新年,休(hua)息(shui)了三周,不过我又回来更新了,经过前面四篇想必小伙伴已经了解日志的使用以及最佳实践了,这个系列的文章也差不多要结束了,今天我们来总结一下. 概览 这篇 ...

  5. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

  6. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

  7. 转:java日志组件介绍(common-logging,log4j,slf4j,logback )

    原网址:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging common-logging是 ...

  8. 用slf4j+logback实现多功能日志解决方案 --- 转

    大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有 ...

  9. 使用 logback + slf4j 进行日志记录

    此处主要介绍maven web工程下如何使用 logback + slf4j  进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在).La ...

随机推荐

  1. Java基础 awt Frame 设置窗体的大小 位置 可见性

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  2. x264 b_annexb格式和多slice

    实际应用环境:iOS,Android x264_param_t中有下面两个参数值得注意下int i_threads;        /* encode multiple frames in paral ...

  3. Java13新特性 -- 文本块

    在JDK 12中引入了Raw String Literals特性,但在发布之前就放弃了.这个JEP与引入多行字符串文字(text block) 在意义上是类似的. 这条新特性跟 Kotlin 里的文本 ...

  4. 查找算法(1)--Sequential search--顺序查找

    1. 顺序查找 (1)说明 顺序查找适合于存储结构为顺序存储或链接存储的线性表.     (2)基本思想 顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的 ...

  5. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  6. Linux CentOS7 下无图形界面安装Oracle11G R2版本

    01,系统 Centos7 数据库版本 Oracle_11gR2 ,以及硬件要求 内存不能小于 1G,可用硬盘不小于8G Swap分区空间不小于2G grep MemTotal /proc/memin ...

  7. Win10 专业版 Hyper-V 主机计算服务无法启动

    Windows 10升级1809版本后,发现Hyper-V不能用了,管理器里是一片空白,看服务Hyper-V 主机计算服务没有启动,手动启动的话失败,报错,代码1053. 自己尝试修复,也百度了很久, ...

  8. [QT] - MjpegStreamer客户端(简易版)#工程源码

    简介: 大学时期学习弄的一个小软件,可以起到示例的作用,软件的几个功能截图如正文所示,文末提供工程源码文件,感谢支持! 功能截图: [ 开发板启动 mjpg_streamer 服务器 ] [ 启动软件 ...

  9. es内存不够

    8核32G 3台 ELS机器,当时只给es配置了8G内存,es的总体数据量大小将近30G(查看GET /_cat/shards?v)

  10. Python学习之路:函数传递可变参数与不可变参数

    函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2] def fun(a): print('传入函数时a的值为:', a ...