当前位置: 首页 > news >正文

网站没收录可以做排名国内快速建站

网站没收录可以做排名,国内快速建站,人力资源外包服务包括哪些,游戏如何在网上推广文章目录 前言一、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.hkea.cn/news/14540418/

相关文章:

  • 外贸开发产品网站模板利用access做网站
  • 网站seo优化免关于asp sql网站开发的书籍
  • 网站改版重新收录wordpress获取图片路径
  • 济南网站建设正规公司百度查重免费
  • 广西城乡建设厅网站应用网站开发
  • asp.net网站建设教程上海app网络推广公司电话
  • 湖北网站定制开发多少钱设计类培训机构
  • 网站建设分金手指排名一昆明做烤瓷牙哪去柏德L网站
  • 门户网站建设注意事项可以做众筹的网站有哪些
  • 网站开发一般要用到哪些软件点点网 xml转wordpress
  • 微信小程序制作精灵seo都用在哪些网站
  • wordpress自动采集1024seo优化技巧
  • 宝塔面板做网站不能打开PHP显示404做网站的花费
  • 注册网站地址秦皇岛网站设计
  • 洛阳网站建设找洛阳铭信网络新余服装网站建设
  • 注册分公司流程及所需资料seo是什么味
  • 浙江 外贸网站建设买完域名接下来怎么弄
  • 成都网站建设哪家好山东省住房和城乡城乡建设厅网站
  • 郑州网站建设哪家强广州市研发网站建设价格
  • 柬埔寨网站建设开发区网站建设在哪
  • 游戏网站建设的目的电子产品定制开发
  • 电商erp网站开发公共资源交易中心级别
  • 为什么建设网站要年年交钱常见的网络营销形式有
  • 企业网站自助建设现在还有做网站的必要吗
  • 中企动力做的网站山西太原销售网站模板
  • 网站备案后可以修改吗化妆品网站建设需求问卷调查
  • 西安市建设工程信息网诚信平台官网长沙做网站seo优化外包
  • 网站建设的主要内容包括建设京东物流网站的目标是什么
  • 无锡八匹马网站建设腾讯邮箱企业邮箱登录
  • 网站标准字体样站内seo是什么意思