天津哪里做网站最好,百度广州分公司是外包吗,湛江专业做网站,重庆教育建设集团有限公司网站文章目录 前言一、JCL1、JCL简介2、快速入门3、 JCL原理 二、SLF4J1、SLF4J简介2、快速入门2.1、输出动态信息2.2、异常信息的处理 3、绑定日志的实现3.1、slf4j实现slf4j-simple和logback3.2、slf4j绑定适配器实现log4j 4、桥接旧的日志框架4.1、log4j日志重构为slf4jlogback的… 文章目录 前言一、JCL1、JCL简介2、快速入门3、 JCL原理 二、SLF4J1、SLF4J简介2、快速入门2.1、输出动态信息2.2、异常信息的处理 3、绑定日志的实现3.1、slf4j实现slf4j-simple和logback3.2、slf4j绑定适配器实现log4j 4、桥接旧的日志框架4.1、log4j日志重构为slf4jlogback的组合 前言 什么时日志门面 随着系统开发的进行可能会更新不同的日志框架造成当前系统中存在不同的日志依赖让我们难以统一的管理和控制。借鉴JDBC的思想为日志系统也提供一套门面那么我们就可以面向这些接口规范来开发避免了直接依赖具体的日志框架。这样我们的系统在日志中就存在了日志的门面和日志的实现。 常见的日志框架及日志门面 常见日志门面JCL、slf4j常见日志实现JUL、log4j、logback、log4j2框架诞生顺序log4j -- JUL -- JCL -- slf4j -- logback -- log4j2 日志门面和日志实现的关系 一、JCL
1、JCL简介
全称为Jakarta Commons Logging是Apache提供的一个通用日志APIcommon-logging会通过动态查找的机制在程序运行时自动找出log4j或者jdk自带的jul使用它的好处就是代码依赖是common-logging而非log4j的API 避免了和具体的日志API直接耦合在有必要时可以更改日志实现的第三方库不改变代码只修改依赖JCL有两个基本的抽象类Log日志记录器LogFactory日志工厂负责创建Log实例
2、快速入门
jcl依赖
dependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.2/version
/dependencyimport org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class JCLTest {Testpublic void test01() {Log log LogFactory.getLog(JCLTest.class);log.info(info);}
}只导入commons-logging的输出结果 此时没有任何第三方日志框架我们使用的就是jdk自带的JUL 导入commons-logging并添加log4j依赖和log4j.properties配置文件输出结果 dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version
/dependency#配置根节点logger
log4j.rootLoggerinfo,consolelog4j.appender.consoleorg.apache.log4j.ConsoleAppender
log4j.appender.console.layoutorg.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern[%-10p] [%t] [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%l] %m%n3、 JCL原理
通过LogFactory动态加载Log实现类Jdk14Logger就是jdk自带JUL日志框架因为JUL从jdk1.4开始提供SimpleLog是日志门面JCL自带日志功能简单一般不用 日志门面创建公共接口org.apache.commons.logging.Log日志实现类Logger实现接口Log这样对外暴露的Log不变只需要动态加载不同的Logger如果只导入JCL门面不导入其他日志实现那么日志实现为jdk自带JUL如果导入JCL门面并导入log4j依赖那么日志实现为log4jlog4j优先级最高 二、SLF4J
1、SLF4J简介
简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架主要意义在于提供接口具体的实现可以交由其他日志框架例如log4j和logback等slf4j自己也提供了功能较为简单的实现但是一般很少用到SLF4J最重要的两个功能就是对于日志框架的绑定以及日志框架的桥接
2、快速入门
slf4j依赖
!--slf4j 核心依赖--
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version
/dependency!--slf4j 自带的简单日志实现 --
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-simple/artifactIdversion1.7.25/version
/dependencyslf4j-api只提供api具体日志实现由slf4j-simple提供
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class SLF4JTest {Testpublic void test01(){Logger logger LoggerFactory.getLogger(SLF4JTest.class);logger.trace(trace信息);logger.debug(debug信息);logger.info(info信息);logger.warn(warn信息);logger.error(error信息);}
}输出结果 2.1、输出动态信息
Logger方法public void info(String format, Object... arguments);
Test
public void test02() {Logger logger LoggerFactory.getLogger(SLF4JTest.class);String name zs;int age 23;// logger.info(学生信息-姓名name年龄age); 字符串拼接效率低// logger.info(学生信息-姓名{}年龄{},new Object[]{name,age}); 老方式代码冗余logger.info(学生信息-姓名{}年龄{}, name, age);// 新方式简单
}输出结果 2.2、异常信息的处理
Logger方法public void info(String msg, Throwable t);
Test
public void test03() {Logger logger LoggerFactory.getLogger(SLF4JTest.class);try {Class.forName(aaa);} catch (ClassNotFoundException e) {// 打印栈追踪信息// e.printStackTrace();logger.info(具体错误是, e);}
}输出结果 3、绑定日志的实现 使用slf4j绑定日志的流程 添加slf4j-api的依赖使用slf4j的API在项目中进行统一的日志记录绑定具体的日志实现框架 绑定已经实现了slf4j的日志框架,直接添加对应依赖绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖 slf4j有且仅有一个日志实现框架的绑定如果出现多个默认使用第一个依赖日志实现 使用slf4j绑定日志的原理 public class StaticLoggerBinder implements LoggerFactoryBinder这个类负责静态org.slf4j.LoggerFactory类与相应的日志实现ILoggerFactory类绑定只要有这个类就可以实现slf4j门面对应日志实现包名都是org.slf4j.impl
3.1、slf4j实现slf4j-simple和logback slf4j-simple和logback都是slf4j门面出现后才有的日志实现所以这两生来就有自己的StaticLoggerBinder类。 依赖
!--slf4j 核心依赖--
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version
/dependency!-- logback依赖 --
dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.3/version
/dependency!--slf4j 自带的简单日志实现 --
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-simple/artifactIdversion1.7.25/version
/dependency导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;如果有多个日志实现的话会出红色警告默认使用先导入的实现无论使用slf4j自己的slf4j-simple还是logback导包都不会变都用的以上两个
Test
public void test04(){Logger logger LoggerFactory.getLogger(SLF4JTest.class);logger.trace(trace信息);logger.debug(debug信息);logger.info(info信息);logger.warn(warn信息);logger.error(error信息);
}输出结果 3.2、slf4j绑定适配器实现log4j
由于log4j是在slf4j之前出品的日志框架实现所以并没有遵循slf4j的API规范之前集成的logback是slf4j之后出品的日志框架实现就是按照slf4j的标准指定的API所以我们导入依赖就能用如果想要使用slf4j门面需要绑定一个适配器slf4j-log4j12
依赖
!--slf4j 核心依赖--
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.25/version
/dependency!--
导入log4j适配器依赖
slf4j-log4j12依赖的slf4j-apislf4j-api可以不用重复导入依赖--
dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.7.25/version
/dependency导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;Test
public void test05(){Logger logger LoggerFactory.getLogger(SLF4JTest.class);logger.trace(trace信息);logger.debug(debug信息);logger.info(info信息);logger.warn(warn信息);logger.error(error信息);
}log4j.properties
#指定日志的输出级别与输出端
log4j.rootLoggerinfo,console# 配置appender输出方式输出到控制台
log4j.appender.consoleorg.apache.log4j.ConsoleAppender
log4j.appender.console.layoutorg.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern[%-10p] [%t] [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%l] %m%n输出结果 与slf4j-simple和logback的实现原理其实一样都是在相同包下org.slf4j.impl下创建StaticLoggerBinder类将slf4j门面与日志实现绑定起来。log4j需要适配器slf4j-log4j12JUL需要适配器slf4j-jdk14 4、桥接旧的日志框架 桥接解决的问题当系统中存在之前的日志API可以通过桥接转换到slf4j的实现 先去除之前老的日志框架的依赖添加SLF4J提供的桥接组件为项目添加SLF4J的具体实现
4.1、log4j日志重构为slf4jlogback的组合 重构前 依赖
dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version
/dependencylog4j.properties
#配置根节点logger
log4j.rootLoggertrace,consolelog4j.appender.consoleorg.apache.log4j.ConsoleAppender
log4j.appender.console.layoutorg.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern[%-10p]%r %c%t%d{yyyy-MM-dd HH:mm:ss:SSS} %m%n导包
import org.apache.log4j.Logger;Test
public void test07(){Logger logger Logger.getLogger(Log4jTest.class);logger.info(info信息);
}查看Logger类源码属于log4j包下的类 重构后 依赖删除log4j依赖添加slf4j提供的桥接组件和logback依赖
!-- log4j相关的桥接器 --
dependencygroupIdorg.slf4j/groupIdartifactIdlog4j-over-slf4j/artifactIdversion1.7.25/version
/dependency
!-- logback依赖 --
dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.3/version
/dependency导包依然不变
import org.apache.log4j.Logger;Test
public void test08(){Logger logger Logger.getLogger(Log4jTest.class);logger.info(info信息);
}查看Logger类源码属于log4j-over-slf4j包下的类 如此操作看上去依赖还是org.apache.log4j.Logger实际已不再是log4j包下的类日志实现也变成了slf4j门面可以随意搭配的方式了。 文章转载自: http://www.morning.mkrjf.cn.gov.cn.mkrjf.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.mbmh.cn.gov.cn.mbmh.cn http://www.morning.wdskl.cn.gov.cn.wdskl.cn http://www.morning.xyhql.cn.gov.cn.xyhql.cn http://www.morning.fjkkx.cn.gov.cn.fjkkx.cn http://www.morning.ssfq.cn.gov.cn.ssfq.cn http://www.morning.lsnnc.cn.gov.cn.lsnnc.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.krjyq.cn.gov.cn.krjyq.cn http://www.morning.kmkpm.cn.gov.cn.kmkpm.cn http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn http://www.morning.kxbry.cn.gov.cn.kxbry.cn http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn http://www.morning.c7629.cn.gov.cn.c7629.cn http://www.morning.lsqmb.cn.gov.cn.lsqmb.cn http://www.morning.nftzn.cn.gov.cn.nftzn.cn http://www.morning.kgxrq.cn.gov.cn.kgxrq.cn http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn http://www.morning.khzml.cn.gov.cn.khzml.cn http://www.morning.bybhj.cn.gov.cn.bybhj.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.wnhgb.cn.gov.cn.wnhgb.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.lhygbh.com.gov.cn.lhygbh.com http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.haolipu.com.gov.cn.haolipu.com http://www.morning.rbnnq.cn.gov.cn.rbnnq.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.zwznz.cn.gov.cn.zwznz.cn http://www.morning.jzykw.cn.gov.cn.jzykw.cn http://www.morning.rui931.cn.gov.cn.rui931.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn http://www.morning.rbmm.cn.gov.cn.rbmm.cn http://www.morning.mjats.com.gov.cn.mjats.com http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.ryrgx.cn.gov.cn.ryrgx.cn http://www.morning.mczjq.cn.gov.cn.mczjq.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.bsghk.cn.gov.cn.bsghk.cn http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn http://www.morning.cfnht.cn.gov.cn.cfnht.cn http://www.morning.ryspp.cn.gov.cn.ryspp.cn http://www.morning.cprls.cn.gov.cn.cprls.cn http://www.morning.srmdr.cn.gov.cn.srmdr.cn http://www.morning.fqhbt.cn.gov.cn.fqhbt.cn http://www.morning.dfrenti.com.gov.cn.dfrenti.com http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.rszwc.cn.gov.cn.rszwc.cn http://www.morning.hhmfp.cn.gov.cn.hhmfp.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn http://www.morning.hxbps.cn.gov.cn.hxbps.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn http://www.morning.cldgh.cn.gov.cn.cldgh.cn http://www.morning.qxycf.cn.gov.cn.qxycf.cn http://www.morning.mbpfk.cn.gov.cn.mbpfk.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn