个人认为,如果公司一些基础类库不做约束,很可能“埋坑”,形成技术债务,最终为此付出代价。本文讲解一个最基本的日志打印规范。

1. 日志打印组件

日志组件有很多,日志门面的选择有:Slf4j、Apache Commons Logging等。

日志的实现更多,有:log4j、logback、log4j2、java util logging、jboss logging等等。

目前,我们使用slf4j作为日志门面,log4j2作为日志实现。

2. 日志级别

日志的级别有很多,我们一般只用四个。日志级别由低到高debug-->info-->warn-->error

DEBUG(调试)

开发调试日志。一般来说,在系统实际运行过程中,不会输出该级别的日志。因此,开发人员可以打印任何自己觉得有利于开发查问题的任何log。

INFO(通知)

INFO日志级别主要用于记录系统运行状态等关联信息。该日志级别,常用于反馈系统当前状态给最终用户。所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。

WARN(警告)

WARN日志常用来表示系统模块发生问题,但并不影响系统运行。 此时,进行一些修复性的工作,还能把系统恢复到正常的状态。

ERROR(错误)

此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。 就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。

3. 日志打印场景

在我们的系统中,不同的日志级别的打印场景大致如下

DEBUG 调试日志。目前管理相对宽松,我们暂时没有严格要求。

INFO 业务日志。我们用来记录业务的主流程的走向。

WARN 警告日志。一般来说,发生对整个系统没什么影响的异常时,可以打印该级别的日志。

ERROR 错误日志。级别比较高,如果发生一些异常,并且任何时候都需要打印时使用。

4. 日志使用方式

示例代码

  private static final Logger logger = LoggerFactory.getLogger(TestController.class);

我们使用的日志门面是slf4j,使用时应面向接口编程,LOGGER/LoggerFactory应该都是slf4j的API。

严禁直接使用日志实现包。原因大致有两点

1、是面向接口编程更优雅,这点不必说明;

2、举个例子,因为log4j已经几年不更新,老的项目可能使用了log4j,现在想要换用logback或者log4j2,如直接使用log4j的API,不利于选型更换与API的统一。

禁止字符串拼接

例如:

logger.debug("当前用户是:" + user + ",传入参数是:" + userId);

严禁使用字符串拼接的方式打印日志,可读性、可维护性都比较差。

建议的写法如下:

logger.debug("当前用户是:{},传入参数是:{},返回值是:{},用户信息:{}", a,b new Object[]{token, userId, userInfo, authcInfo});

因为我们使用的是slf4j,slf4j有占位符填充的功能。多个占位符可放在Object数组中。

java占位符打印_java简单日志打印规范小记相关推荐

  1. java占位符填充_Java占位符

    一.背景 在使用java开发的过程中,经常需要使用将字符串拼接到一起(比如,用于日志输出),常用方法如下: 使用+将不同字符串进行拼接 使用StringBuilder 使用String.format ...

  2. java占位符填充_Java使用freemark生成word

    1.制作模板 先用office word做一个模板word文档,${usrName}.${nowDate}占位符 可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式 ...

  3. java 占位符写法_java中占位符

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. form ...

  4. Java 占位符 例子 - 消息模板

    例子1: import java.text.SimpleDateFormat; import java.util.Date;import org.slf4j.Logger; import org.sl ...

  5. python占位符补数据_Python 占位符格式化的简单示例

    这篇文章主要为大家详细介绍了Python 占位符格式化的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 占位符 ...

  6. java占位符打印_什么是 Java 构造器?

    构造器是编程的强大组件.使用它们来释放 Java 的全部潜力. -- Seth Kenlon(作者) 在开源.跨平台编程领域,Java 无疑(?)是无可争议的重量级语言.尽管有许多 伟大的跨平台 框架 ...

  7. java lodop打印_Java的云打印Lodop

    Lodop是一款专业的WEB打印控件,其设计目标是简单易用.功能足够强大,开创WEB打印开发的新局面. Lodop设计者对WEB下的打印开发任务进行了分类汇总,高度抽象,设计出仅用几个功能函数,就可实 ...

  8. java调adobe打印_Java报表工具打印方案集锦 | 改变自己

    本文试图对市面上流行的纯java实现的web报表工具,jasperreport . stylereport .杰表.润乾报表.快逸.finererport为例,分析各报表工具采用的web打印技术的异同 ...

  9. Linux C简单日志打印代码示例

    背景 项目代码的打印函数,有的用printf,有的用std::cout,风格不统一,也不方便查看,因此需要编写一个统一的函数接口. 需求及实现 时间戳 该打印函数需要有时间戳,精确到毫秒.这样能直观观 ...

最新文章

  1. 使用Python和OpenCV构建图像金字塔
  2. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
  3. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP
  4. 原生 遍历_细品原生JS从初级到高级知识点汇总(三)
  5. python3教程-终于清楚python3详细教程
  6. 【实操】看了太多公式概念?你该学会怎么用T检验了!
  7. yolo极大抑制_pytorch实现yolov3(4) 非极大值抑制nms
  8. java basic data type,java基本数据类型--Basic Datatypes
  9. 【报告分享】2020企业精细化运营白皮书.pdf(附下载链接)
  10. 【java】Applet显示阶乘结果
  11. java jdk中优先队列的实现
  12. 在线教育如何应对流量洪峰?阿里云专家给出了“上云+云数据库”的答案!
  13. 关于DevExpress Winform GridControl GridView 主从表(Master-Detail)导出Excel问题
  14. 【SRS】ATC模式和时间抖动矫正
  15. python无法正常启动0xc000007b_应用程序无法正常启动(0xc000007b)。
  16. H5头像完整制作,可拖拽缩放,可添加装饰图标(装饰图标支持缩放、旋转、拖拽)
  17. Win7管理受信任证书 - CA证书 - 系统根证书
  18. 哈工大硕士生实现 11 种数据降维算法,代码已开源!
  19. Docker安装Mysql8、并打成镜像在其他内网环境部署
  20. 共享||28份2020在线教育行业报告

热门文章

  1. 接口应用小玩具-博客园积分排名变动监控工具
  2. 一个很好学习Mysql网站
  3. MySQL8常见客户端和启动相关参数
  4. oracle 删除表从回收站恢复
  5. 《OpenGL ES 3.x游戏开发(上卷)》一1.5 Android应用程序运行的机制
  6. Fedora GNOME 的常用快捷键
  7. tcp三次握手和syn 洪水攻击
  8. Eclipse+Maven创建webapp项目
  9. redhat6 + 11G DG部署
  10. 使用 C# + SQLite + PetaPoco + django 快速打造桌面程序