需求:
需要传入某一个文件或者类或者方法的名字,生成对应日志文件,且每一个传入名字的文件单独有一个文件夹,子文件夹为日期,日期文件夹里面包含warn.log,error.log,debug.log,info.log。通过过滤器实现只打印对应级别的日志。
遇到的问题:
度娘了很久,网上关于logback的几乎都是xml进行配置的,但是经过尝试,xml配置的方式不能直接进行动态的输出,故此方法暂时淘汰,遂想到用纯代码的方式,尝试了许多次才得到正确的结果,所以记录下来,以免今后少走弯路。
内容:
1.创建LoggerBuilder类,这个类相当于一个日志工具类,之后其他类需要用日志的时候,直接调用它的方法就好了。
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.rolling.RollingFileAppender;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @author Wzy525110
*/
@Component
public class LoggerBuilder {
private static final Map<String,Logger> container = new HashMap<>();
public Logger getLogger(String name) {
Logger logger = container.get(name);
if(logger != null) {
return logger;
}
synchronized (LoggerBuilder.class) {
logger = container.get(name);
if(logger != null) {
return logger;
}
logger = build(name);
container.put(name,logger);
}
return logger;
}
private static Logger build(String name) {
RollingFileAppender errorAppender =new AppenderTest().getAppender(name,Level.ERROR);
RollingFileAppender infoAppender =new AppenderTest().getAppender(name,Level.INFO);
RollingFileAppender warnAppender =new AppenderTest().getAppender(name,Level.WARN);
RollingFileAppender debugAppender =new AppenderTest().ge