slf4j的正确使用
头两天领导分配个任务是要把项目中所有try catch里的异常处理收集到elk中,由于之前的处理方式五花八门,就集中处理了下, 事后还被批评了。
不是所有的异常信息都需要被记录到log中
使用SLF4J
- 使用门面模式的日志框架,有利于维护各个类的日志处理方式的统一。
- 实现方式的统一使用,使用logback框架。
什么时候应该打日志?
- 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志来定位问题所在的。
- 当你碰到if..else或者switch这样的分支的时候,可以在首行打印日志,用来确定进入了那个分支。
- 经常以功能为核心进行开发的时候,可以在提交代码前,通过日志看到整个流程。
基本格式
必须使用参数化信息的方式:
“ logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol); ”
对于debug日志,必须判断是否为debug级别后,才进行使用。

不过不建议这样做。因为上面的代码涉及到了字符串的拼接, 会产生很多String对象,占用空间,影响程序性能。
可以使用 [{}] 进行参数的隔离
如果有参数变量,可以写成下面这样:

这样的格式写法,对于排查问题更有帮助。
不同级别的使用
ERROR
定义:影响到程序正常运行,当前请求正常运行的异常情况:
- 打开配置文件失败
- 对接第三方的异常(包括第三方返回错误码)
- 所有影响功能使用的异常。包括sqlException和除了业务异常之外的所有异常(runtimeException,Ecxception)
如果抛出了异常,就不要记录error日志,有最终处理方式进行处理。
如下图:

WARN
定义:不应该出现但是不影响程序,当前请求正常运行的异常情况:
- 有容错机制的时候出现的错误情况
- 找不到配置文件,但是程序可以自动创建或者能够继续向下执行
- 缓存池占用接近临界值的时候
- 接口抛出业务异常的时候
INFO
定义:系统运行信息,外部接口
- service中对于系统/业务状态的变更
- 主要逻辑分步骤
- 客户端请求参数
- 调用第三方的调用参数和调用结果
这里同样也是要有所抉择的,普通简单service是没有意义的。不是针对每个业务都这样做,
这里对于复杂的业务逻辑,例如电商系统中的下订单逻辑,工业系统的停送电逻辑等等
DEBUG
定义:可以填写想知道的相关信息,最好有相关参数,生产环境需要关闭debug,如果需要开启的话,需要使用开关进行管理,不能一直开启

TRACE
定义:特别详细的系统运行信息。业务代码中,不要使用(除非有特殊用意,否则用debug代替)
trace的级别比debug还要低一些,并且会自动检查级别,如果高于trace就跳过。
而debug是先生产要打印的语句,然后再检查级别。如果高于debug就不输出
所以要debug进行判断,否则会生成多余的对象。
slf4j的正确使用的更多相关文章
- Java 日志管理最佳实践
转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...
- Java日志记录的5条规则
日志记录是在软件开发过程中常常需要考虑的关键因素. 当产品运行出错时,日志文件通常是我们进行错误分析的首要选择. 而且,在很多情况下,它们是我们手上唯一可以用来查明发生状况和问题根本原因的信息. 可见 ...
- lombok使用教程
Lombok介绍.使用方法和总结https://www.cnblogs.com/heyonggang/p/8638374.html Lombok简介.使用.工作原理.优缺点https://www.ji ...
- SLF4j 居然不是编译时绑定?日志又该如何正确的分文件输出?——原理与总结篇
各位新年快乐,过了个新年,休(hua)息(shui)了三周,不过我又回来更新了,经过前面四篇想必小伙伴已经了解日志的使用以及最佳实践了,这个系列的文章也差不多要结束了,今天我们来总结一下. 概览 这篇 ...
- java日志组件介绍(common-logging,log4j,slf4j,logback )
转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...
- Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明
Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...
- 转:java日志组件介绍(common-logging,log4j,slf4j,logback )
原网址:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging common-logging是 ...
- 用slf4j+logback实现多功能日志解决方案 --- 转
大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有 ...
- 使用 logback + slf4j 进行日志记录
此处主要介绍maven web工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在).La ...
随机推荐
- 一个按权重(weight)进行LB的算法
package netty; import com.google.common.collect.ImmutableList; import lombok.SneakyThrows; import ja ...
- 开源:dotNET.Boilerplate For .net core 开发框架
git地址: https://gitee.com/conan5566linyiling/conan.net dotNET.Boilerplate is an open source applicati ...
- 运维笔记--SqlServer相关版本&下载&安装&配置远程连接
下载地址:SqlServer2008为例 SqlServer2008:https://www.microsoft.com/en-us/download/details.aspx?id=1695 Sql ...
- Linux远程连接ssh工具(FinalShell)xshell替代神器
对对对 FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本2.9.8,更新时间2019.6.19 wntr 2017-01-17 11:0 ...
- IDEA强制清除Maven缓存
目录 重新导入依赖的常见方式 存在的问题 彻底清除IDEA缓存的方式 重新导入依赖的常见方式 下面图中的刷新按钮,在我的机器上,并不能每次都正确导入pom.xml中写的依赖项,而是导入之前pom.xm ...
- 脚本备份MySQL数据库和binlog日志
用Mysqldump实现全库备份+binlog的数据还原 首先是为mysql做指定库文件的全库备份 vim mysqlbak.sh #!/bin/bash #定义数据库目录,要能找到mysqldump ...
- python初级(302) 7 列表(二)冒泡排序
一.复习: 1.如何创建一个空列表,如何创建一个有数据的列表 2.列表可以包含的内容 3.从列表中获取元素和修改元素的方法 4.列表的分片 5.增加元素和删除元素 6.选择排序的算法: 一堆数据,每次 ...
- HTML5 VUE单页应用 SEO 优化之 预渲染(prerender-spa-plugin)
前言:当前 SPA 架构流行的趋势如日中天,前后端分离的业务模式已经成为互联网开发的主流方式,但是 单页面 应用始终存在一个痛点,那就是 SEO, 对于那些需要推广,希望能在百度搜索时排名靠前的网站而 ...
- Win10升级后无法删除Windows.old文件夹
问题:win10系统进行升级后(升级到1903版本),无法删除生成的Windows.old文件夹,提示文件夹访问被拒绝. 点击继续后,无法进行正常删除. 解决方法:使用windows自带的磁盘清理进行 ...
- 浅谈 Docker 安全合规建设
通过阅读网上帖子及浏览相关信息,大家可能会产生一种错觉:Docker 安全性不足,对 Docker 导入生产环境持保守态度.不过实际情况是,虽然我们需要对容器的安全性高度关注,但只要使用得当,完全可以 ...