
cool.linco.common.log.Log Maven / Gradle / Ivy
package cool.linco.common.log;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.LoggerFactory;
import org.slf4j.event.Level;
import org.slf4j.spi.LocationAwareLogger;
/**
* @author lin
* 封装基础理论: slf4j也是封装,但是能够定位日志点
* 原因是日志输出框架通过FQCN参数定位封装类
* slf4j把自身作为日志输出的FQCN参数, 所以内部能够实现
* slf4j外部FQCN参数被屏蔽, 无法设置
* 在slf4j中, Logger的底层类LocationAwareLogger是日志输出过程依赖的类, 此类的log过程能够接受FQCN参数
*
* 这个log用于以固定格式输出参数内容, 如果不需要固定形式, 采用原生logger
*/
public class Log {
private final static String LOGINST_FQCN = Log.class.getName();
private String fqcn = LOGINST_FQCN;
private final LocationAwareLogger lALogger;
private Log(Class> clazz) {
lALogger = (LocationAwareLogger) LoggerFactory.getLogger(clazz);
}
public Log setFqcn(String fqcn) {
this.fqcn = fqcn;
return this;
}
private Log(String className) {
lALogger = (LocationAwareLogger) LoggerFactory.getLogger(className);
}
public static Log getLog(Class> clazz) {
return new Log(clazz);
}
public static Log getLog(String className) {
return new Log(className);
}
public void log(Level level, String logStr) {
doOutput(level, logStr, null);
}
public void log(Level level, String logStr, Throwable throwable) {
doOutput(level, logStr, throwable);
}
public void log(Level level, String logStr, Object... params) {
doOutput(level, logStr, null, params);
}
public void log(Level level, String logStr, Throwable throwable, Object... params) {
doOutput(level, logStr, throwable, params);
}
private void doOutput(Level logLevel, String logStr, Throwable throwable, Object... params) {
lALogger.log(null, fqcn, logLevel.toInt(), logStr, params, throwable);
}
public static boolean isEnabled(Log log, Level logLevel) {
boolean flag;
if (logLevel == null) {
flag = false;
} else {
switch (logLevel) {
case DEBUG:
flag = log.lALogger.isDebugEnabled();
break;
case INFO:
flag = log.lALogger.isInfoEnabled();
break;
case WARN:
flag = log.lALogger.isWarnEnabled();
break;
case ERROR:
flag = log.lALogger.isErrorEnabled();
break;
case TRACE:
flag = log.lALogger.isTraceEnabled();
break;
default:
flag = log.lALogger.isInfoEnabled();
}
}
return flag;
}
}