装饰器模式案例-日志

给案例,该模式的概念就不给了,直接上代码跟图,大偷懒下。

该案例是对Logger logger = LoggerFactory.getLogger(clazz)进行封装加额外的功能,比如将日志内容输出改为json格式,或者增加点其他信息

备注:

在springboot下的环境的写的案例,logger是Log4j + slf4j

类图设计

1.类图设计(不知道接口logger怎么出来。。)

 

 

 

 2类图讲解

从上到下给代码案例

DecoratorLogger 是装饰器类

DefineLogger 是具体组件

DefineLoggerFactory是为了遵循使用习惯,获取logger单独写在类中

代码设计

DecoratorLogger



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

public class DecoratorLogger implements Logger {

//写protected是为了DefineLogger直接通过这个logger调用他自己写的方法,而不使用被DecoratorLogger 重写的方法
    protected Logger logger;
    public DecoratorLogger ( Logger logger){
        this.logger = logger;
    }

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

    @Override
    public void info(String 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) {

    }

    ...........其他省略
}

DefineLogger


import org.slf4j.Logger;

public class DefineLogger extends DecoratorLogger {
    public DefineLogger(Logger logger) {
        super(logger);
    }

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

}
DefineLoggerFactory
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DefineLoggerFactory {
    public static DefineLogger getLogger(Class clazz){
        Logger logger = LoggerFactory.getLogger(clazz);
        return new DefineLogger(logger);
    }
}

Demo


import org.slf4j.Logger;

public class Demo {
    private static final Logger logger  = JsonLoggerFactory.getLogger(Demo.class);
    public static void main(String[] args) {
        logger.debug("aaaaaaaaaaaaaaaaaaaaa");
    }
}

运行后结果

2021-08-04T17:18:32,105|INFO|main|c.f.p.c.Demo|12|info infoaaaaaaaaaaaaaaaaaaaaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值