给案例,该模式的概念就不给了,直接上代码跟图,大偷懒下。
该案例是对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