头两天领导分配个任务是要把项目中所有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. vue路由的异步加载(懒加载)方法

    vue路由的异步加载(懒加载)方法. javascriptvue.jsvue-router  阅读约 2 分钟 vue本身不多介绍.直接说问题,因为vue的所有路由都是加载在一个app.js里的,如果 ...

  2. easyui的datagrid的使用记录

    datagrid是在 table的基础上变化而来的, 而不是在div的基础上来的. 从div来变成 datagrid,样式的设置还是是比较麻烦的. dg=datagrid 的标题 来源于 column ...

  3. VS2015 创建C++动态库及使用

    转载:https://blog.csdn.net/w_x_myself/article/details/82252646 1.dll的特点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代 ...

  4. Oracle 11g R2手动配置EM(转)

    转自:http://blog.itpub.net/9034054/viewspace-1973418/ Oracle 11g R2手动配置EM Oracle 作者:luashin 时间:2016-01 ...

  5. vue---引入外部样式

    在用 vue-cli 进行项目开发的时候,经常会遇到要引入外部的样式,那该怎么做的呢? 示例:使用 import 引入 scss import variables from '@/assets/sty ...

  6. django中安全sql注入等

    模拟sql注入 使用原生sql语句编写login登录逻辑 class LoginUnsafeView(View): def get(self, request): return render(requ ...

  7. phpstorm2019.1 实现保存(ctrl+s)同时格式化代码

    1.选择Edit(编辑)->Macros(宏)->Start Macro Recording(开始录制宏),如下图: 2.直接按想要录制的快捷键,先按Ctrl+ALT+L,然后键盘按Ctr ...

  8. Superset配置hive数据源

    1.在uri中配置 hive://localhost:10000/default 2.查询 3.如果你的hive集群是带有kerberos认证的,hive数据源需要这样配置 hive://xxx:xx ...

  9. pycharm更改缩进快捷键-ubuntu系统

    前言 ubuntu系统tab+shirt是切换窗口的快捷键,而这个快捷键也恰恰是pycharm这个快捷键,他们的快捷键产生了冲突,所以目前我们需要更改下pycharm的快捷键,这样就能愉快使用缩进功能 ...

  10. node框架那些事儿

    一.简单介绍 express:适合初学者,模版引擎,路由,中间件 koa2:核心中间件 eggjs:企业级应用框架 二.express 服务端框架,提供路由功能,异常处理.路由系统+中间件构成web开 ...