Java日志系列——日志门面,阿里日志规约,SLF4J

181 篇文章 3 订阅
5 篇文章 0 订阅

日志门面

系统架构复杂后产生的问题

当我们的系统变的复杂的之后,难免会集成其他的系统,不同的系统之间可能会使用不同的日志系统。在一个系统中,我们的日志框架可能会出现多个,会出现混乱,而且随着时间的发展,可能会出现新的效率更高的日志系统,如果我们想切换代价会非常的大。如果我们的日志系统能和jdbc一样,有一套自己的规范,其他实现均按照规范去实现,就能很灵活的使用日志框架了。

为什么需要日志门面

日志门面就是为了解决这个问题而出现的一种技术,日志门面是规范,其他的实现按照规范实现各自的日志框架即可,我们程序员基于日志门面编程即可。

常见的日志门面:

  1. JCL
  2. slf4j

常见的日志实现:

  1. JUL
  2. log4j
  3. logback
  4. log4j2

当前最流行的就是logback和log4j2

阿里日志规约

  1. 应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API。使用门面模式的日志框架,有利于维护和各个类的日志处理方法统一。
  2. 日志文件推荐至少保存15天,因为有些异常具备以"周"为频次发生的特点。
  3. 应用中的扩展日志(如打点、临时监控、访问日志等)命名方式: appName_logType_logName.log。logType为日志类型,推荐分类有stats/monitor/visit等;
  4. logName为日志描述。这种命名的好处:通过文件名就可以知道日志文件属于哪个应用,哪种类型,有什么目的,这也有利于归类查找。
  5. 对trace/debug/info级别的日志输出,必须使用条件输出形式或者占位符的方式。
  6. 避免重复打印日志,否则会浪费磁盘空间。务必在日志配置文件中设置additivity=false。
  7. 异常信息应该包括两类:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字向上抛出。
  8. 谨慎地记录日志。生产环境禁止输出debug日志;有选择地输出info日志;如果使用warn记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免吧服务器磁盘撑爆,并及时删除这些观察日志。
  9. 可以使用warn日志级别记录用户输入参数错误的情况,避免当用户投诉时无所适从。

规约下载

如果大家需要请私信我,免费给大家(泰山版2020),请大家以学习为目的,不要拿去复印,上传网上赚钱

SLF4J

简单日志门面(Simple Logging Facade For Java)SLF4)主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。当然sf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、 logback等),中间使用桥接器完成桥接。

目前市面上最流行的就是他了

官网地址

https://www.slf4j.org/

两大功能

  1. 日志框架绑定
  2. 日志框架桥接

QuickStart

1.引入依赖

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

2.通过工厂获取对象

 final Logger logger = LoggerFactory.getLogger(this.getClass().getName());

3.实现

    @Test
    void test(){
        final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
        logger.error("error");
        logger.warn("warn");
        logger.info("info");
        logger.debug("debug");
        logger.trace("trace");
        //占位符输出方式
        logger.warn("{}first,{}second","zhangsan",18);
    }

在这里插入图片描述

绑定其他日志实现

SLF4]支持各种日志框架。SLF4J发行版附带了几个称为SLF4J绑定的jar文件,每个绑定对应一个受支持的框架。

绑定步骤

  1. 添加slf4j-api的依赖
  2. 使用slf4j的API在项目中进行统一的日志记录
  3. 绑定具体的日志实现框架
    3.1. 绑定已经实现了slf4j的日志框架,直接添加对应依赖
    3.2. 绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖
  4. slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)

日志框架桥接

通常,您依赖的某些组件依赖于SLF4J以外的日志记录API。您也可以假设这些组件在不久的将来不会切换到SLF4J。为了解决这种情况,SLF4J附带了几个桥接模块,这些模块将对log4j,JCL和java.utillogging APl的调用重定向,就好像它们是对SLF4J的API一样。

原始使用log4j的api写代码,但是具体的实现给你抽离了,我们依赖了一个中间层,这个层其实是用旧的api操作slf4j,而不是操作具体的实现。

桥接解决的是项目中日志的遗留问题,当系统中存在之前的日志API,可以通过桥接转换到slf4j的实现

  1. 先去除之前老的日志框架的依赖,必须去掉。
  2. 添加SLF4J提供的桥接组件,这个组件就是模仿之前老的日志写了一套相同的api,只不过这个api是在调用slf4j的api。
  3. 为项目添加SLF4J的具体实现。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值