从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE
  • JavaWeb
  • Spring
  • 主流框架
  • 学习网课的心得
  • 输入法
职场系列
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE
  • JavaWeb
  • Spring
  • 主流框架
  • 学习网课的心得
  • 输入法
职场系列
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE概念

    • Ant

    • 日志

      • 日志介绍
      • print大法
      • 常见的日志框架-简单介绍
      • 一个日志框架的设计
        • 前言
        • 设计思路
        • 正交性
      • JDK Logging
      • log4j2 笔记
      • 日志的一些小技巧
      • 日志系统小结
    • Junit

    • JDBC

    • XML和JSON

    • Java
  • JavaWeb

  • Spring

  • 主流框架

  • 韩顺平

  • Java
  • Java
  • JavaEE
  • 日志
2022-12-03
目录

一个日志框架的设计

# 03.一个日志框架的设计

日志框架内部的原理

# 前言

在介绍具体的框架怎么使用之前,我们先介绍其设计思路,这有助于我们理解和使用他们。

一个日志框架,如果让你来设计?应该怎么做?

首先得明确需求,这个框架应该能做什么:

  1. 除了能将日志打印到控制台,还能打印到文件,甚至可以通过网络发送邮件或 发到数据库里去存储。
  2. 日志应该能格式化输出。例如txt纯文本,xml格式甚至HTML格式等
  3. 日志内容应该有标准。例如代码执行的时间,执行的函数是什么,结果是什么,不能乱打一气
  4. 日志应该能够分级(前面我们讲过日志的级别)
  5. 对于不同的package,甚至不同的class,能灵活的输出到不同的地方。例如对于error的日志,则打印到error.log,对于成功的日志,则打到success.log
  6. ...................................

本文主要参考了《码农翻身》的一个小片段: 一个著名的日志系统是怎么设计出来的? (opens new window),已获得作者授权。

​​

‍

# 设计思路

既然是在Java中,首先得有个类用来表示日志的概念;一个是时间戳,一个是日志内容,我们称这个类为Logger。这样,用户在打印日志的时候,就可以用logger提供的方法

‍

第一,既然要能将日志打印到多个地方,那么可以写个接口,具体的实现依靠子类:

取名叫Appender,指可以不断的追加(append)日志。

‍

第二和第三,日志能格式化输出,那么同理,定义一个Formatter接口,具体的实现依赖于子类,里面包含了日期格式化等方法

​​

‍

‍

第四,既然日志要分级,就定义一个常量类即可,里面分别有几个常量标书不同的级别。级别有高低之分。

‍

‍

第五,对于不同的package,甚至不同的类,如何做到输出的地方不同呢?在定义logger的时候传入包名或类名!

private static Logger logger = Logger.getLogger("com.peterjxl.logging");
1

‍

‍

‍

‍

# 正交性

‍

以下内容来自一个著名的日志系统是怎么设计出来的? (opens new window)

如果你把Logger, Appender, Formatter看成坐标系中的X轴,Y轴,Z轴,这三者可以独立变化而不互相影响

可以任意扩展Appender接口而影响不到Logger和Formatter, 无论有多少个Logger 都影响不了Appender和Formatter , 这就是正交

图片

当你从系统中提取出正交的概念的时候,那就威力无比了,因为变化被封装在了一个维度上,你可以把这些概念任意组合,而不会变成意大利面条似的代码。

图片

‍

‍

​​

在GitHub上编辑此页 (opens new window)
上次更新: 2023/3/26 02:41:39
常见的日志框架-简单介绍
JDK Logging

← 常见的日志框架-简单介绍 JDK Logging→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式