diff --git a/src/main/java/neatlogic/framework/logback/boolex/ConsoleFilterEvaluator.java b/src/main/java/neatlogic/framework/logback/boolex/ConsoleFilterEvaluator.java new file mode 100644 index 0000000000000000000000000000000000000000..23d6b2830784160c0f4b3410423cc9b4cc664636 --- /dev/null +++ b/src/main/java/neatlogic/framework/logback/boolex/ConsoleFilterEvaluator.java @@ -0,0 +1,254 @@ +/* + * Copyright(c) 2023 NeatLogic Co., Ltd. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package neatlogic.framework.logback.boolex; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.boolex.EventEvaluatorBase; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.AntPathMatcher; + +public class ConsoleFilterEvaluator extends EventEvaluatorBase { + + private static AntPathMatcher antPathMatcher = new AntPathMatcher("."); + + private String errorWhitelist; + + private String errorBlacklist; + + private String warnWhitelist; + + private String warnBlacklist; + + private String infoWhitelist; + + private String infoBlacklist; + + private String debugWhitelist; + + private String debugBlacklist; + + private String traceWhitelist; + + private String traceBlacklist; + + @Override + public boolean evaluate(ILoggingEvent event) throws NullPointerException { + if (event.getLevel() == Level.ERROR) { + if(StringUtils.isNotBlank(errorWhitelist)) { + boolean flag = false; + String[] split = errorWhitelist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + if(StringUtils.isNotBlank(errorBlacklist)) { + String[] split = errorBlacklist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + return false; + } + } + } + } else if (event.getLevel() == Level.WARN) { + if(StringUtils.isNotBlank(warnWhitelist)) { + boolean flag = false; + String[] split = warnWhitelist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + if(StringUtils.isNotBlank(warnBlacklist)) { + String[] split = warnBlacklist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + return false; + } + } + } + } else if (event.getLevel() == Level.INFO) { + if(StringUtils.isNotBlank(infoWhitelist)) { + boolean flag = false; + String[] split = infoWhitelist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + if(StringUtils.isNotBlank(infoBlacklist)) { + String[] split = infoBlacklist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + return false; + } + } + } + } else if (event.getLevel() == Level.DEBUG) { + if(StringUtils.isNotBlank(debugWhitelist)) { + boolean flag = false; + String[] split = debugWhitelist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + if(StringUtils.isNotBlank(debugBlacklist)) { + String[] split = debugBlacklist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + return false; + } + } + } + } else if (event.getLevel() == Level.TRACE) { + if(StringUtils.isNotBlank(traceWhitelist)) { + boolean flag = false; + String[] split = traceWhitelist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + if(StringUtils.isNotBlank(traceBlacklist)) { + String[] split = traceBlacklist.split("\\|"); + String loggerName = event.getLoggerName(); + for (String pattern : split) { + if (antPathMatcher.match(pattern, loggerName)) { + return false; + } + } + } + } + return true; + } + + public String getErrorWhitelist() { + return errorWhitelist; + } + + public void setErrorWhitelist(String errorWhitelist) { + this.errorWhitelist = errorWhitelist; + } + + public String getErrorBlacklist() { + return errorBlacklist; + } + + public void setErrorBlacklist(String errorBlacklist) { + this.errorBlacklist = errorBlacklist; + } + + public String getWarnWhitelist() { + return warnWhitelist; + } + + public void setWarnWhitelist(String warnWhitelist) { + this.warnWhitelist = warnWhitelist; + } + + public String getWarnBlacklist() { + return warnBlacklist; + } + + public void setWarnBlacklist(String warnBlacklist) { + this.warnBlacklist = warnBlacklist; + } + + public String getInfoWhitelist() { + return infoWhitelist; + } + + public void setInfoWhitelist(String infoWhitelist) { + this.infoWhitelist = infoWhitelist; + } + + public String getInfoBlacklist() { + return infoBlacklist; + } + + public void setInfoBlacklist(String infoBlacklist) { + this.infoBlacklist = infoBlacklist; + } + + public String getDebugWhitelist() { + return debugWhitelist; + } + + public void setDebugWhitelist(String debugWhitelist) { + this.debugWhitelist = debugWhitelist; + } + + public String getDebugBlacklist() { + return debugBlacklist; + } + + public void setDebugBlacklist(String debugBlacklist) { + this.debugBlacklist = debugBlacklist; + } + + public String getTraceWhitelist() { + return traceWhitelist; + } + + public void setTraceWhitelist(String traceWhitelist) { + this.traceWhitelist = traceWhitelist; + } + + public String getTraceBlacklist() { + return traceBlacklist; + } + + public void setTraceBlacklist(String traceBlacklist) { + this.traceBlacklist = traceBlacklist; + } +} diff --git a/src/main/java/neatlogic/framework/logback/boolex/CustomFilterEvaluator.java b/src/main/java/neatlogic/framework/logback/boolex/PathFilterEvaluator.java similarity index 76% rename from src/main/java/neatlogic/framework/logback/boolex/CustomFilterEvaluator.java rename to src/main/java/neatlogic/framework/logback/boolex/PathFilterEvaluator.java index 3d1e44d9d924b80d3acf0f9f4f53867d5acd8080..99021bd8b38d61567a23c79fbd826d9a090c2553 100644 --- a/src/main/java/neatlogic/framework/logback/boolex/CustomFilterEvaluator.java +++ b/src/main/java/neatlogic/framework/logback/boolex/PathFilterEvaluator.java @@ -20,11 +20,14 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.boolex.EvaluationException; import ch.qos.logback.core.boolex.EventEvaluatorBase; import org.apache.commons.lang3.StringUtils; +import org.springframework.util.AntPathMatcher; /** * 优先使用白名单。及:如果白名单和黑名单同时配置,则使用白名单 */ -public class CustomFilterEvaluator extends EventEvaluatorBase { +public class PathFilterEvaluator extends EventEvaluatorBase { + + private static AntPathMatcher antPathMatcher = new AntPathMatcher("."); private String whitelist; @@ -32,29 +35,29 @@ public class CustomFilterEvaluator extends EventEvaluatorBase { @Override public boolean evaluate(ILoggingEvent event) throws NullPointerException, EvaluationException { - if (StringUtils.isBlank(whitelist) && StringUtils.isBlank(blacklist)) { - return true; - } if(StringUtils.isNotBlank(whitelist)) { + boolean flag = false; String[] whiteList = whitelist.split("\\|"); String loggerName = event.getLoggerName(); - for (String white : whiteList) { - if (loggerName.startsWith(white)) { - return true; + for (String pattern : whiteList) { + if (antPathMatcher.match(pattern, loggerName)) { + flag = true; + break; } } - return false; + if (!flag) { + return false; + } } if(StringUtils.isNotBlank(blacklist)) { String[] blackList = blacklist.split("\\|"); String loggerName = event.getLoggerName(); - for (String black : blackList) { - if (loggerName.startsWith(black)) { + for (String pattern : blackList) { + if (antPathMatcher.match(pattern, loggerName)) { return false; } } - return true; } return true; }