forked from rongchao/epmet-cloud-rizhao
				
			
				 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