如下是slf4j-api包下的Logger接口类里其中几个方法的声明:

package org.slf4j;public interface Logger {/*** Log a message at the INFO level.** @param msg the message string to be logged*/public void info(String msg);/*** Log a message at the INFO level according to the specified format and argument.** @param format the format string* @param arg    the argument*/public void info(String format, Object arg);/*** Log a message at the INFO level according to the specified format and arguments.** @param format    the format string* @param arguments a list of 3 or more arguments*/public void info(String format, Object... arguments);/*** Log a message at the ERROR level.** @param msg the message string to be logged*/public void error(String msg);public void error(String format, Object arg);public void error(String format, Object... arguments);/*** Log an exception (throwable) at the ERROR level with an accompanying message.** @param msg the message accompanying the exception* @param t   the exception (throwable) to log*/public void error(String msg, Throwable t);
}

slf4j(Simple Logging Facade for Java)是Facade模式的典型应用,它定义了一套标准的日志接口,诸如logback、log4j、slf4j-simple等框架都是这个日志接口的具体实现。从这一点来看,slf4j的标准化显得相当重要,当然,从上面这些方法可见,它做到了!

我这里要点赞的也是这几个方法的定义。注意观察比较这几个有参的info/error方法的第一个参数:有的是format,有的是msg。

充分展现了代码的整洁之道,由此可以看出来作者是很讲究代码的可读性的。

看上面几个方法,

  • 如果记录异常信息,不妨调用error(String msg, Throwable t)方法。这时,第一个参数不是format,是msg。所以下面语句里的“{}”就有画蛇添足之嫌了:
try {......}
} catch (IOException e) {LOG.error("#PayCenterHttpTransport,http调用出错!异常信息:{}", e);
}

  • 如果要打印更详细的info日志,可以调用logger.info那几个重载方法,支持用format形式。
log.info("融宝请求url:{},请求报文:{}", url, json);

  • logger.error也是支持format的。如下是Logger接口类里这个error重载方法的定义。注意调用方式是

    log.error("执行请求{}出现异常,",1,new Exception("test"));
  /*** Log a message at the ERROR level according to the specified format and arguments.* <p/>* <p>This form avoids superfluous object creation when the logger is disabled for the ERROR level. </p>** @param format the format string* @param arg1   the first argument* @param arg2   the second argument*/public void error(String format, Object arg1, Object arg2);

打印的异常日志是:

14:55:25.997 [main] ERROR ddd - 执行请求1出现异常,
java.lang.Exception: testat com.emax.paycenter.common.util.MailUtil.main(MailUtil.java:100) [classes/:na]

=====over=====

转载于:https://www.cnblogs.com/buguge/p/8526868.html

强迫症犯了,忍不住赞一下slf4j包Logger.java的优雅代码相关推荐

  1. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用

    lombok插件:Data自动get/set方法, Slf4j实现Logger的调用 lombok.Data import lombok.Data; import org.hibernate.anno ...

  2. 内部类、包、修饰符、代码块

    内部类: 内部类概念:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类.局部内部类,内部类中可以直接访问外部类的 ...

  3. .net core 引用jar_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  4. java 柱状图jar_GitHub - mafulong/NetworkExper: 计网实验,抓包,java,jigloo界面开发,柱状图,文件自定义保存...

    jiWangShiYanByJava 计网实验,抓包,java,jigloo界面开发,柱状图,文件自定义保存 基于Winpcap的网络流量统计分析系统的设计与实现 一.实验内容描述 本实验是用java ...

  5. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  6. [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)

    [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件) 文章分类:Java编程 该软件无需安装,界面清爽. 转自:http://www.devdoc.org/index.php/a ...

  7. java war包混淆,spring项目的代码混淆(proguard)

    前不久被要求对java web的war包做代码混淆,我使用proguard6.0.3完成的.后面也许还会用到,因此记录下过程和配置方法,demo代码按照图1结构进行组织.仅对混淆功能进行说明,其他功能 ...

  8. java中将类放入包中,Java 包

    Java 允许使用包(package)将类组织起来.借助于包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理.使用包的主要原因是确保类名的唯一性.标准的 Java 类库分布在多个包中 ...

  9. 什么是java包?java包作用是什么?

    在Java中的包是一种封装一组类.子包和接口的机制,可用于组织一组相关的类和接口.那么具体什么是java包?java包作用是什么?本篇来简单解答下. 什么是java包? Java 包(package) ...

最新文章

  1. 13款经典JavaScript图形和图表绘制工具
  2. tcp断开连接的几种状态
  3. 华为备份历史版本_华为手机NAS备份时提示“需处于同一局域网”的解决方法
  4. js获取用户当前所在城市(ip)
  5. LeetCode 973. 最接近原点的 K 个点(排序/优先队列/快排)
  6. 使用anaconda切换Python环境使用spyder
  7. selenium headless报错Message: unknown error: failed to wait for extension background page to load
  8. 查看linux操作系统版本信息
  9. dos格式化linux,linux mformat命令对MS-DOS文件系统的磁盘进行格式化
  10. 计算机专业论文周记20篇,毕业论文工作周记6篇
  11. JS实现弹性漂浮广告代码
  12. C++通讯录管理系统
  13. 奇点云 x 阿里云 | 联合发布综合体数字化转型与数据创新解决方案
  14. 对php课程的建议,万紫千红总是春——对新课程语文教学、复习的建议与采饶措施a href=http://www.ruiwen.com/friend/list.php(教师中心专稿)/a...
  15. 项目管理工具DHTMLX Gantt灯箱元素配置教程:配置灯箱元素
  16. TC358775XBG是一颗将MIPI DSI信号转换成single/ dual -link LVDS的芯片,最高分辨率支持到1920x1200
  17. Nginx软件介绍及下载地址
  18. LTE-A载波聚合技术(14)---CQI的TDM和CDM
  19. 【工具分享】佳能CR2格式的文件怎么转换成jpg?
  20. arduino动态刷新显示_360Hz刷新率加Fast IPS,这是电竞显示器的未来?不见得

热门文章

  1. 使用VScode开发C语言程序,环境安装配置,保姆级教程
  2. 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
  3. virtualbox调试linux内核,virtualbox+kgdbt调试linux内核
  4. nginx转发图片请求变成html/text_教你使用nginx部署网站教程
  5. 禁用win10触摸屏手势_我才发现win10居然有这么多好用的功能
  6. 手机linux系统指令大全,Linux系统指令大全
  7. workarea8php,oracle PGA管理(算法)
  8. mysql 事物状态有几种_MySQL知识点汇总:亿级高并发数据库运转原理大公开!
  9. java图片不动了_JDK 12又来了,我学不动了...
  10. 3 v4 中心节点固定_死磕以太坊源码分析之p2p节点发现