闲来没事,看见当前的项目的日志形式有点冗余,每个类都需要声明确实有点繁琐,

因此重新将logback重新封装一下,供整个工程共享使用,版本是1.0.9。

代码如下:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import org.slf4j.Marker;
import ch.qos.logback.classic.Level;
public final class Logger { private static ch.qos.logback.classic.Logger innerLogger; private static final String FQCN = Logger.class.getName(); private static Method innerMethod; public static int load(ch.qos.logback.classic.Logger logger) {
innerLogger = logger;
try {
innerMethod = innerLogger.getClass().getDeclaredMethod("filterAndLog_0_Or3Plus", String.class, Marker.class, Level.class, String.class, Object[].class, Throwable.class);
innerMethod.setAccessible(true);
} catch (NoSuchMethodException | SecurityException e) {
innerLogger.error("load failed, Exception:" + e);
return -;
}
return ;
} public static void debug(String msg) {
innerLogMethod(FQCN, null, Level.DEBUG, msg, null, null);
} public static void error(String msg) {
innerLogMethod(FQCN, null, Level.ERROR, msg, null, null);
} public static void info(String msg) {
innerLogMethod(FQCN, null, Level.INFO, msg, null, null);
} public static void warn(String msg) {
innerLogMethod(FQCN, null, Level.WARN, msg, null, null);
} private static void innerLogMethod(String localFQCN, Marker marker, Level level, String msg, Object[] params, Throwable t)
{
try {
innerMethod.invoke(innerLogger, localFQCN, marker, level, msg, params, t);
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
innerLogger.error("execute innerMethod failed, Exception:" + e);
}
}
}

详细原理随后再解释吧:

Log接口的重新封装的更多相关文章

  1. spring boot 接口返回值封装

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. 基于小程序请求接口 wx.request 封装的类 axios 请求

    基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...

  3. USB 3.0连接器引脚、接口定义及封装尺寸

    上篇整理了USB 2.0A型.B型和Mini USB接口定义及封装,本文补充USB 3.0接口定义,USB 3.0采用的双总线结构,在速率上已经达到4.8Gbps,所以称为Super speed,在U ...

  4. 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装。

    微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本 ...

  5. 抽象类,接口类,封装,property,classmetod,statimethod

    抽象类,接口类,封装,property,classmetod,statimethod(类方法,静态方法) 一丶抽象类和接口类 接口类(不崇尚用) 接口类:是规范子类的一个模板,只要接口类中定义的,就应 ...

  6. 路由器配置深入浅出—路由器接口PPP协议封装及PAP和CHAP验证配置

    知识域: 是针对点对点专线连接的接口的二层封装协议配置 PPP的PAP和CHAP验证,cpt支持,不一定要在gns3上做实验. 路由器出厂默认是hdlc封装,修改为ppp封装后,可以采用pap验证或者 ...

  7. uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装

    1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...

  8. USB 2.0 A型、B型、Mini和Micro接口定义及封装

    USB全称Universal Serial Bus(通用串行总线),目前USB 2.0接口分为四种类型A型.B型.Mini型还有后来补充的Micro型接口,每种接口都分插头和插座两个部分,Micro还 ...

  9. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

随机推荐

  1. JavaScript学习总结【11】、JS 运动

    动画效果在网站中是一种非常常见的交互式体验效果,比如侧边栏分享.图片淡入淡出,我们把这种动画效果就叫做运动,也就是让物体动起来.如果想让一个物体动起来,无非就是改变它的速度,也就是改变属性值,比如 l ...

  2. Couldn't get lock for %t/vertx.log

    今天在启动vertx框架的项目时,报“Couldn't get lock for %t/vertx.log”的错误. 解决方案: 1,找出vertx.log的目录.一般在(C:\Users\Admin ...

  3. VS2015 + QT5.7 中文的坑

    试验1: #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif #include < ...

  4. C# 实现繁体字和简体字之间的转换

    今天收到一个需求,将一组简体的汉字转换成繁体的汉字,刚开始有点茫然,后来在网上搜了一下思路,结果很少有涉及,终于我在看了MSDN后找到了如何解决,可能这方面对一些高程来说很Easy,但是除了高程还有很 ...

  5. POJ 3414 Pots bfs打印方案

    题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...

  6. qt 5 基础知识 2(控件篇)

    QVBoxLayout *lay = new QVBoxLayout(this); // 创建一个竖直的盒子 lebel 篇 lay->addWidget(label = new QLabel( ...

  7. iOS代码规范文档

    文件命名规范: 1. 项目统一使用类前缀ZY. 2. 分类命名+后面统一使用ZYExtension,例:NSDictionary+ZYExtension.h,常用分类定义在内部并写好文档注释.如果功能 ...

  8. 可以用来开发h5的软件小结

    webStorm phoneGap notepad++ eclips text sublime dreamWeaver intellij idea 学习h5 需要掌握的  大块的知识 xhtml ja ...

  9. 《无懈可击的Web设计》_灵活的文字

    常见的方法 body{ font-size:12px; } 使用像素单位的优点: 不管使用哪种浏览器或者设备来查看,文字看起来都大小一致. 为什么这么做不是无懈可击的? 以像素为单位设定文字大小之后, ...

  10. SCOI2015题解 && 考试小结

    Day1: 第一题:裸地二分+网络流:二分答案,连接将每行每列拆成点,对于满足答案的格子行列连边,看是否流量是否大于t即可,可惜第k大看成了第k小,然后100分就没了. 第二题:倍增,考虑贪心算法,就 ...