Method method = handlerMethod.getMethod();
final Log log = method.getAnnotation(Log.class);
if (log != null) {
// 得到LogMessageObject
final LogMessageObject logMessageObject = LogUitls.getArgs();
// 另起线程异步操作
new Thread(new Runnable() {
@Override
public void run() {
try {
LogLevel lastLogLevel = logAPI.getRootLogLevel();
// 先对自定义包等级做判断
Map<String, LogLevel> customLogLevel = logAPI.getCustomLogLevel();
if (!customLogLevel.isEmpty()) {
Class<?> clazz = handlerMethod.getBean().getClass();
String packageName = clazz.getPackage().getName();
Set<String> keys = customLogLevel.keySet();
for (String key : keys) {
if (packageName.startsWith(key)) {
lastLogLevel = customLogLevel.get(key);
break;
}
}
}
LogMessageObject defaultLogMessageObject = logMessageObject;
if (defaultLogMessageObject == null) {
defaultLogMessageObject = LogMessageObject.newWrite();
}
if (defaultLogMessageObject.isWritten()) { // 判断是否写入log
// 覆盖,直接写入日志
if (log.override()) {
logAPI.log(log.message(), defaultLogMessageObject.getObjects(), log.level());
} else {
// 不覆盖,参考方法的日志等级是否大于等于最终的日志等级
if (!log.override() && log.level().compareTo(lastLogLevel) >= 0 ) {
logAPI.log(log.message(), defaultLogMessageObject.getObjects(), log.level());
}
}
}
} catch (Exception e) {
LOGGER.error(Exceptions.getStackTraceAsString(e));