首页 > 编程语言 >java框架-日志-体系与级别-技巧

java框架-日志-体系与级别-技巧

时间:2024-06-04 23:29:41浏览次数:17  
标签:java 可以 SLF4J API 使用 日志 级别

 体系

一是提供了统一的日志门面 API,即图中紫色部分,实现了中立的日志记录 API。

二是桥接功能,即图中蓝色部分,用来把各种日志框架的 API(图中绿色部分)桥接到SLF4J API。这样一来,即便你的程序中使用了各种日志 API 记录日志,最终都可以桥接到 SLF4J 门面 API。

三是适配功能,即图中红色部分,可以实现 SLF4J API 和实际日志框架(图中灰色部分)的绑定。SLF4J 只是日志标准,我们还是需要一个实际的日志框架。日志框架本身没有实现 SLF4J API,所以需要有一个前置转换。Logback 就是按照 SLF4J API 标准实现的,因此不需要绑定模块做转换。

需要理清楚的是,虽然我们可以使用 log4j-over-slf4j 来实现 Log4j 桥接到 SLF4J,也可以使用 slf4j-log4j12 实现 SLF4J 适配到 Log4j,也把它们画到了一列,但是它不能同时使用它们,否则就会产生死循环。jcl 和 jul 也是同样的道理。

级别

1. 要注意工程中配置的优先级,因为会忽略掉低优先级的日志

2. 定义

  1. ALL 最低等级的,用于打开所有日志记录。
  2. TRACE 很低的日志级别,一般不会使用。
  3. DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
  4. INFO 消息在粗粒度级别上突出强调应用程序的运行过程。这个可以用于生产环境中输出程序运行的一些重要信息。
  5. WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给开发者的一些提示。
  6. ERROR 指出发生错误的信息,可能会导致系统出错或是宕机等,必须要避免
  7. FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
  8. OFF 最高等级,用于关闭所有日志记录。

3. 使用

  1. 更加具体的调试信息, 例如调用了什么方法, 参数是什么, 可以使用 trace
  2. 在项目开发阶段, 调试程序的正确性, 可以使用 debug
  3. 正常的业务执行流程、系统的启动/关闭、需要做的审计等等都可以使用 info
  4. 不是错误, 不会影响程序的正常执行, 但是并不建议这样做, 可以使用 warn
  5. 程序出现了某种错误, 需要介入处理

技巧

1. 合理的记录日志

  1. 搞清楚当前工程的日志级别,保证日志可以被打印
  2. 使用参数化形式{}占位 , []行参数隔离
  3. 日志文件的名称应该是可以自解释的,通常,至少会要求名称中包含类型标识和时间标识
  4. 日志要有滚动策略,这是考虑到避免单个文件过大,以及磁盘占用问题

2. 日志有意义(正确性)且不冗余(必要性)

  1. 以实际场景为例来说明如何去做
  2. 导 HTTP请求的入参和结果
  3. 远程接口调用(HTTP或RPC)情况
  4. 特殊的条件分支

3. 不应打印日志

  1. 大数据量日志 空间的浪费
  2. 在循环中打日志,特别是大循环, 排查问题困难
  3. 没有意义的日志 对于系统维护没有帮助
  4. 如果日志什么都说明不了,那你一定要考虑修改下删除这条日志混清视听
  5. 密码、邮箱、手机号码属于私密信息,为了避免数据泄露,不应该打数据隐私

4. 日志能够对逻辑进行解释

 

标签:java,可以,SLF4J,API,使用,日志,级别
From: https://blog.csdn.net/qq_26594041/article/details/139422004

相关文章

  • java-框架-lombok
    1.@Data@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter@DatapublicclassUser{privateIntegerid;privateStringusername;privateDatebirthday;priva......
  • 基于Java的电影评论管理系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • Java 变量
    Java了解变量1.为什么需要变量变量是程序的基本组成单位无论是使用哪种高级程序语音编写程序,变量都是其程序的基本组成单位比如://变量有三个基本要素(类型+名称+值)publicclassVar01{ publicstaticvoidmain(String[]args){ intnum1=1;//定义了......
  • java函数笔记
    Statement.executeQuery和Statement.executeUpdate作用:用于执行SQL查询和更新操作。问题:容易导致SQL注入攻击。解决方法:使用PreparedStatement进行参数化查询。//不安全的做法Statementstmt=connection.createStatement();ResultSetrs=stmt.executeQuery("SEL......
  • java 数值类型 强制转换注意
    数值类型分别为【byte】,【short】,【int】,【long】,【float】,【double】byte:最大值为127,最小值为-128;short:最大值为32767,最小值为-32768;int:最大值为2,147,483,647,最小值为-2,147,483,648;long:最大值为9,223,372,036,854,775,807,最小值为-9,223,372,036,854,7......
  • JavaScript省市区县选择三级联动实现
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <style>  .select-container{   margin:20pxauto;   width:610px;  }  select{   width:200px;   height:25px;  ......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript美食网站(甜品)
    HTML+CSS+JS【美食网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript个人网站(图书爱好)
    HTML+CSS+JS【个人网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • (JAVA)设计模式-两阶段终止模式
    `publicclassTowPhaseTermination{publicThreadthread;publicvoidstart(){thread=newThread(newRunnable(){@Overridepublicvoidrun(){while(true){booleaninterrupted=Thread.currentThread().isIn......
  • Java集合-Map家族
    集合-Map家族1各实现类的特点HashMap:存key+value,key去重,无序,线程不安全LinkedHashMap:存key+value,key去重,有序,线程不安全Hashtable:弃用,存key+value,key去重,无序,线程安全,方法加锁-效率低ConcurrentHashMap:存key+value,key去重,无序,线程安全,局部加锁、CAS-效率高TreeMap:存key+......