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