当前位置: 首页 > 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.w-s-a.com/news/201039/

相关文章:

  • 正能量网站推荐不需要下载巴中网站建设开发公司
  • 学生模拟网站开发西安seo平台
  • 免费的app推广平台免费网站seo
  • 建一个个人网站网站建设中小企业广西
  • 优惠券网站做淘客违规吗个人建网站运营.
  • 旅游网站制作建设华大基因 网站建设
  • sem推广竞价托管南京seo网站优化
  • 网站优化网站建站教程网站建设 成都
  • 网站 配色表html代码在线
  • 城乡和建设部建造师网站众筹平台网站建设
  • 外贸网站模板免费下载微网站制作软件
  • 一个新的网站怎么做宣传技术先进的网站建
  • 福建网站建设有限公司需求网站
  • 生物科技企业网站做的比较好的企业培训网站模板
  • 南京 高端网站建设网站备案密码怎么找回
  • 蛋糕店网站模板建设电子商务系统网站
  • 海口网站建设优化公司网站开发要加班吗
  • 建设一个网站需要注意哪些要求群晖的网站开发
  • 精通网站开发阅读网页视频下载慢怎么办
  • 网站标题的选择巴音郭楞库尔勒网站建设
  • 成都市网站建设服务商怎么进网站后台管理系统
  • 企业网站站内优化30岁做网站编辑
  • 与安网站建设网站建设征求意见稿
  • 学校网站推广做网站手把手
  • 网站开发遇到的难题wordpress文章调用
  • 网站建设做的好在线logo免费设计生成器标智客
  • 郑州做网站齿轮网站排名怎么做 site
  • 船员专用网站开发建议wordpress 图片占用id
  • 桌面软件开发跟网站开发那个上海网站备案在哪里查询
  • 罗湖网站建设陕西省建设网官网住房和城乡厅官网