3 changed files with 98 additions and 68 deletions
@ -0,0 +1,97 @@ |
|||
package com.epmet.commons.tools.filter; |
|||
|
|||
import ch.qos.logback.classic.Level; |
|||
import ch.qos.logback.classic.filter.LevelFilter; |
|||
import ch.qos.logback.classic.spi.ILoggingEvent; |
|||
import ch.qos.logback.classic.spi.IThrowableProxy; |
|||
import ch.qos.logback.classic.spi.StackTraceElementProxy; |
|||
import ch.qos.logback.core.spi.FilterReply; |
|||
import com.epmet.commons.tools.utils.HttpClientManager; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
|
|||
import java.text.SimpleDateFormat; |
|||
|
|||
/** |
|||
* desc: 发送日志消息 |
|||
* |
|||
* @date: 2020/6/24 17:47 |
|||
* @author: jianjun liu |
|||
*/ |
|||
public class LogMsgSendFilter extends LevelFilter { |
|||
private static final Logger logger = LoggerFactory.getLogger(LogMsgSendFilter.class); |
|||
@Override |
|||
public FilterReply decide(ILoggingEvent event) { |
|||
//如果日志级别等于设置的日志级别 则发送消息
|
|||
if (event.getLevel().isGreaterOrEqual(Level.ERROR)) { |
|||
try { |
|||
StringBuilder stringBuilder = new StringBuilder(); |
|||
stringBuilder.append("【日志告警】\n"); |
|||
|
|||
stringBuilder.append("\n"); |
|||
|
|||
stringBuilder.append("告警级别:" + event.getLevel()); |
|||
stringBuilder.append("\n"); |
|||
stringBuilder.append("故障时间:" + formatLongTime2Str(event.getTimeStamp())); |
|||
stringBuilder.append("\n"); |
|||
stringBuilder.append("TraceId:" + Thread.currentThread().getName()); |
|||
stringBuilder.append("\n"); |
|||
stringBuilder.append("告警信息:" + event.getFormattedMessage()); |
|||
stringBuilder.append("\n"); |
|||
|
|||
IThrowableProxy throwableProxy = event.getThrowableProxy(); |
|||
//异常信息处理 暂时处理一级的5行数据
|
|||
apendStackInfo(stringBuilder, throwableProxy); |
|||
|
|||
Result<String> flag = HttpClientManager.getInstance().sendAlarmMsg(stringBuilder.toString()); |
|||
if (!flag.success()) { |
|||
logger.warn("msgSender.sendMsg fail,param:{}", stringBuilder.toString()); |
|||
} |
|||
} catch (Exception e) { |
|||
logger.warn("decide exception", e); |
|||
} |
|||
} |
|||
//交给其他filter继续向下处理
|
|||
return super.decide(event); |
|||
} |
|||
|
|||
private void apendStackInfo(StringBuilder stringBuilder, IThrowableProxy throwableProxy) { |
|||
int defaultRowLine = 5; |
|||
if (throwableProxy != null) { |
|||
stringBuilder.append("异常信息:") |
|||
.append(throwableProxy.getClassName()) |
|||
.append(" : ") |
|||
.append(throwableProxy.getMessage()) |
|||
.append("\n"); |
|||
|
|||
StackTraceElementProxy[] stackTraceElementProxyArray = throwableProxy.getStackTraceElementProxyArray(); |
|||
StackTraceElementProxy stackTraceElementProxy = null; |
|||
|
|||
if (stackTraceElementProxyArray.length < defaultRowLine) { |
|||
defaultRowLine = stackTraceElementProxyArray.length; |
|||
} |
|||
for (int i = 0; i < defaultRowLine; i++) { |
|||
stackTraceElementProxy = stackTraceElementProxyArray[i]; |
|||
StackTraceElement stackTraceElement = stackTraceElementProxy.getStackTraceElement(); |
|||
stringBuilder.append("\t\tat "); |
|||
stringBuilder.append(stackTraceElement.getClassName()); |
|||
stringBuilder.append("."); |
|||
stringBuilder.append(stackTraceElement.getMethodName()); |
|||
stringBuilder.append("("); |
|||
stringBuilder.append(stackTraceElement.getFileName()); |
|||
stringBuilder.append(":"); |
|||
stringBuilder.append(stackTraceElement.getLineNumber()); |
|||
stringBuilder.append(")"); |
|||
stringBuilder.append("\n"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
private String formatLongTime2Str(long timestamp) { |
|||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); |
|||
return dateFormat.format(timestamp); |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue