Log 利用装饰模式 打印增强

2023-11-07

包引用

 <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.1.11</version>
 </dependency>

 

LoggerDecorator
package logger;

import org.slf4j.Logger;
import org.slf4j.Marker;

public class LoggerDecorator implements Logger {
    Logger logger;

    public LoggerDecorator(Logger logger) {
        this.logger = logger;
    }

    @Override
    public String getName() {
        return null;
    }

    @Override
    public boolean isTraceEnabled() {
        return false;
    }

    @Override
    public void trace(String s) {

    }

    @Override
    public void trace(String s, Object o) {

    }

    @Override
    public void trace(String s, Object o, Object o1) {

    }

    @Override
    public void trace(String s, Object... objects) {

    }

    @Override
    public void trace(String s, Throwable throwable) {

    }

    @Override
    public boolean isTraceEnabled(Marker marker) {
        return false;
    }

    @Override
    public void trace(Marker marker, String s) {

    }

    @Override
    public void trace(Marker marker, String s, Object o) {

    }

    @Override
    public void trace(Marker marker, String s, Object o, Object o1) {

    }

    @Override
    public void trace(Marker marker, String s, Object... objects) {

    }

    @Override
    public void trace(Marker marker, String s, Throwable throwable) {

    }

    @Override
    public boolean isDebugEnabled() {
        return false;
    }

    @Override
    public void debug(String s) {

    }

    @Override
    public void debug(String s, Object o) {

    }

    @Override
    public void debug(String s, Object o, Object o1) {

    }

    @Override
    public void debug(String s, Object... objects) {

    }

    @Override
    public void debug(String s, Throwable throwable) {

    }

    @Override
    public boolean isDebugEnabled(Marker marker) {
        return false;
    }

    @Override
    public void debug(Marker marker, String s) {

    }

    @Override
    public void debug(Marker marker, String s, Object o) {

    }

    @Override
    public void debug(Marker marker, String s, Object o, Object o1) {

    }

    @Override
    public void debug(Marker marker, String s, Object... objects) {

    }

    @Override
    public void debug(Marker marker, String s, Throwable throwable) {

    }

    @Override
    public boolean isInfoEnabled() {
        return false;
    }

    @Override
    public void info(String s) {
        logger.info(s);
    }

    @Override
    public void info(String s, Object o) {

    }

    @Override
    public void info(String s, Object o, Object o1) {

    }

    @Override
    public void info(String s, Object... objects) {

    }

    @Override
    public void info(String s, Throwable throwable) {

    }

    @Override
    public boolean isInfoEnabled(Marker marker) {
        return false;
    }

    @Override
    public void info(Marker marker, String s) {

    }

    @Override
    public void info(Marker marker, String s, Object o) {

    }

    @Override
    public void info(Marker marker, String s, Object o, Object o1) {

    }

    @Override
    public void info(Marker marker, String s, Object... objects) {

    }

    @Override
    public void info(Marker marker, String s, Throwable throwable) {

    }

    @Override
    public boolean isWarnEnabled() {
        return false;
    }

    @Override
    public void warn(String s) {

    }

    @Override
    public void warn(String s, Object o) {

    }

    @Override
    public void warn(String s, Object... objects) {

    }

    @Override
    public void warn(String s, Object o, Object o1) {

    }

    @Override
    public void warn(String s, Throwable throwable) {

    }

    @Override
    public boolean isWarnEnabled(Marker marker) {
        return false;
    }

    @Override
    public void warn(Marker marker, String s) {

    }

    @Override
    public void warn(Marker marker, String s, Object o) {

    }

    @Override
    public void warn(Marker marker, String s, Object o, Object o1) {

    }

    @Override
    public void warn(Marker marker, String s, Object... objects) {

    }

    @Override
    public void warn(Marker marker, String s, Throwable throwable) {

    }

    @Override
    public boolean isErrorEnabled() {
        return false;
    }

    @Override
    public void error(String s) {

    }

    @Override
    public void error(String s, Object o) {

    }

    @Override
    public void error(String s, Object o, Object o1) {

    }

    @Override
    public void error(String s, Object... objects) {

    }

    @Override
    public void error(String s, Throwable throwable) {

    }

    @Override
    public boolean isErrorEnabled(Marker marker) {
        return false;
    }

    @Override
    public void error(Marker marker, String s) {

    }

    @Override
    public void error(Marker marker, String s, Object o) {

    }

    @Override
    public void error(Marker marker, String s, Object o, Object o1) {

    }

    @Override
    public void error(Marker marker, String s, Object... objects) {

    }

    @Override
    public void error(Marker marker, String s, Throwable throwable) {

    }
}

只重写infor 方法。

增强类JSON

package logger;

import org.slf4j.Logger;

public class JsonLogger extends LoggerDecorator{
    public JsonLogger(Logger logger) {
        super(logger);
    }
    public void info(String s) {
        String str = "log前缀 json格式化->";
        super.info(str+s);
    }
}

 

LoggerJsonFactory 工厂类
package logger;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerJsonFactory {
    public static Logger getLogger(Class<?> clazz){
        Logger logger = LoggerFactory.getLogger(clazz);
        return new JsonLogger(logger);
    }
}
package logger;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Main {
    static Logger log =  LoggerFactory.getLogger(Main.class);

    static Logger log1 =  LoggerJsonFactory.getLogger(Main.class);

    public static void main(String[] args) {
        log1.info("aaaa");
    }
}

打印结果

11:12:29.829 [main] INFO logger.Main - log前缀 json格式化->aaaa
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Log 利用装饰模式 打印增强 的相关文章

随机推荐

  • 详解汽轮机的TSI系统

    汽轮机安全监视系统 TSI 是一种集保护和检测功能于一身的永久监视系统 是大型旋转机械必不可少的保护系统 TSI可以对机组在起动 运行过程中的一些重要参数能可靠地进行监视和储存 它不仅能指示机组运行状态 记录输出信号 实现数值越限报警 出现
  • pycharm pydevconsole.py: error: unrecognized arguments: --mode=server

    使用argparse报错 pycharm pydevconsole py error unrecognized arguments mode server 原代码 args parser parse args 语法格式都没错 最终解决方法
  • Merkle Patricia Tree 详解

    转载自 https ethfans org toya articles 588 1 前言 1 1 概述 Merkle Patricia Tree 又称为Merkle Patricia Trie 是一种经过改良的 融合了默克尔树和前缀树两种树
  • 部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...

    前段时间公司新来了个同事 听说大学是学的广告专业 因为喜欢IT行业就找了个培训班 后来在一家小公司干了三年 现在跳槽来我们公司 来了之后把现有项目的性能优化了一遍 服务器缩减一半 性能反而提升4倍 给公司省了不少成本 后来才知道 他在以前的
  • 【A卷2022Q4】分界线(华为od2023机试真题JAVA+JS)

    更多试卷真题 点击 华为OD2023真题试卷列表 刷题必点 分界线 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 电视剧 分界线 里面有一个片段 男主为了向警察透露案件细节 且不暴露自己 于是将报刊上的字剪切下来 剪拼成匿名
  • 【Python】编程练习:十进制整数转二进制

    文章目录 题目描述 输入格式 输出格式 测试样例 样例输入 样例输出 参考代码 题目描述 十进制整数转二进制的方法是 除以2 取出余数 商继续除以2 直到得到0为止 将取出的余数逆序即可得到对应的二进制数的各位 例如 22 转二进制的计算过
  • c++递归函数

    递归函数是将规模较大的问题化为多个规模较小的同类问题 递归函数的特征是定义中包含函数本身和必须有终止条件 递归调用分为两个阶段 递推和回归 递推 将大问题转化为多个小问题 将问题逐步由未知化为已知 回归 从已知出发 是递推的逆过程 逐个求值
  • (面经三,技术面)——时间:2022-11-11 地点:线上

    面试经历 三 时间 2022 11 11 地点 线上 1 什么是抽象类 有抽象方法的类 用来表征对问题领域进行分析 设计中得出的抽象概念 2 抽象类和接口的区别 继承关系 类只能单继承 接口可以实现多个接口 构造函数 抽象类可以有构造函数
  • 王者荣耀学习工具JAVA Robot按键精灵找色点击功能

    一个简单的JAVA按键精灵 import java awt AWTException import java awt Color import java awt MouseInfo import java awt Point import
  • Pandas(一)—— Pandas基础

    Python模块 Pandas Pandas 一 Pandas基础 一 预备知识 1 1 Python基础 1 2 NumPy基础 1 3 练习 1 3 1 利用列表推导式写矩阵乘法 1 3 2 更新矩阵 1 3 3 连续整数的最大长度 二
  • 编程分钟转化小时怎么编_大中小型三菱PLC分类及编程软件学习内容附图文,初学者必看!...

    不少初学PLC的人都会问一个问题 如果学习三菱PLC编程入门应先学习什么 以下是关于PLC类型和运行原理 GX Developer软件的使用说明 如果这篇文章对你有所帮助 记得 收藏 一 PLC的类型 1 小型PLC 一体式结构 I O点数
  • 从Docker到Kubernetes——K8s多租户管理与资源控制

    文章目录 namespace设计解读 什么是namespace 多namespace使用案例 Kubernetes用户认证机制 应用健康检查 namespace设计解读 namespace是k8s进行多租户资源隔离主要手段 那么它在系统中的
  • 关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令

    一 背景 已安装对应版本的mingw64 并且已经按照网上教程配置了环境变量 但是仍然无法执行gcc命令 二 遇到的问题 gcc 不是内部或外部命令 也不是可运行的程序 三 如何解决 至于如何打开环境变量 我就不赘述了 想必大家配置环境变量
  • GO语言变量声明的方式

    1 指定变量类型 声明后如果不做赋值 那么使用默认值 1 2 没有进行赋值 但是指明了是什么类型 go会自动加上空值 var a string 2 不指定变量类型 需要进行赋值操作 1 2 可以不指定变量类型 通过变量值 go会自行判断该变
  • Element-ui使用@keyup.enter.native的原因

    keyup enter加 native有什么作用 W3C 标准中有如下规定 即 当一个 form 元素中只有一个输入框时 在该输入框中按下回车应提交该表单 如果希望阻止这一默认行为 可以在 标签上添加 submit native preve
  • linux proc进程,linux 下 /proc/进程号/ 重要进程文件的内容解析

    proc maps 查看进程的虚拟地址空间是如何使用的 该文件有6列 分别为 地址 库在进程里地址范围 权限 虚拟内存的权限 r 读 w 写 x s 共享 p 私有 偏移量 库在进程里地址范围 设备 映像文件的主设备号和次设备号 节点 映像
  • 少儿编程scratch与机器人

    少儿编程scratch与机器人 对于很多的家长们来说 孩子的学习一直都是家长们十分关心和重视的一件事情 很多的家长在培养孩子的学习的时候 会给孩子选择一些能够提升孩子能力的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 他们对于
  • css的标准写法,前端css书写规范

    代码书写规范这种东西虽然不是必须的但是确实很有必要的好的书写规范不单单能增加可阅读性和提高代码性能而且有利于后续人员维护代码 良好的书写规范也是区分新手与专业人员的一个标准 一css书写顺序 1 位置属性position top right
  • VUE项目引入微信jssdk

    我们的一个vue webpack的 SPA项目需要在微信中使用 因此需要导入微信的jssdk库 通过搜索发现npm有微信jssdk的依赖包 weixin js sdk 于是 导入依赖包 npm i S weixin js sdk 前端页面U
  • Log 利用装饰模式 打印增强

    包引用