fix(sj_1.4.0): SnailLog4jAppender删除依赖,解决CVE log4j漏洞
This commit is contained in:
parent
0c97cdada8
commit
076bf0ca15
@ -1,104 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2024 .
|
|
||||||
*
|
|
||||||
* SnailJob - 灵活,可靠和快速的分布式任务重试和分布式任务调度平台
|
|
||||||
* > ✅️ 可重放,可管控、为提高分布式业务系统一致性的分布式任务重试平台
|
|
||||||
* > ✅️ 支持秒级、可中断、可编排的高性能分布式任务调度平台
|
|
||||||
*
|
|
||||||
* Aizuda/SnailJob 采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 1. 不得修改产品相关代码的源码头注释和出处;
|
|
||||||
* 2. 不得应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法目的;
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package com.aizuda.snailjob.client.common.appender;
|
|
||||||
|
|
||||||
import com.aizuda.snailjob.client.common.log.report.LogReportFactory;
|
|
||||||
import com.aizuda.snailjob.client.common.log.support.SnailJobLogManager;
|
|
||||||
import com.aizuda.snailjob.client.common.rpc.client.NettyChannel;
|
|
||||||
import com.aizuda.snailjob.common.log.constant.LogFieldConstants;
|
|
||||||
import com.aizuda.snailjob.common.log.dto.LogContentDTO;
|
|
||||||
import org.apache.log4j.AppenderSkeleton;
|
|
||||||
import org.apache.log4j.MDC;
|
|
||||||
import org.apache.log4j.spi.LoggingEvent;
|
|
||||||
import org.apache.log4j.spi.ThrowableInformation;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author wodeyangzipingpingwuqi
|
|
||||||
* @date 2023-12-27
|
|
||||||
* @since 2.6.0
|
|
||||||
*/
|
|
||||||
public class SnailLog4jAppender extends AppenderSkeleton {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void activateOptions() {
|
|
||||||
super.activateOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void append(LoggingEvent event) {
|
|
||||||
|
|
||||||
// Not job context
|
|
||||||
if (Objects.isNull(SnailJobLogManager.getLogMeta()) || Objects.isNull(MDC.get(LogFieldConstants.MDC_REMOTE))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MDC.remove(LogFieldConstants.MDC_REMOTE);
|
|
||||||
LogContentDTO logContentDTO = new LogContentDTO();
|
|
||||||
logContentDTO.addTimeStamp(event.getTimeStamp());
|
|
||||||
logContentDTO.addLevelField(event.getLevel().toString());
|
|
||||||
logContentDTO.addThreadField(event.getThreadName());
|
|
||||||
logContentDTO.addMessageField(event.getMessage().toString());
|
|
||||||
logContentDTO.addLocationField(event.getLocationInformation().fullInfo);
|
|
||||||
logContentDTO.addThrowableField(getThrowableField(event));
|
|
||||||
logContentDTO.addHostField(NettyChannel.getClientHost());
|
|
||||||
logContentDTO.addPortField(NettyChannel.getClientPort());
|
|
||||||
|
|
||||||
// slidingWindow syncReportLog
|
|
||||||
Optional.ofNullable(LogReportFactory.get()).ifPresent(logReport -> logReport.report(logContentDTO));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean requiresLayout() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getThrowableField(LoggingEvent event) {
|
|
||||||
String throwable = getThrowableStr(event);
|
|
||||||
if (throwable != null) {
|
|
||||||
return throwable;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getThrowableStr(LoggingEvent event) {
|
|
||||||
ThrowableInformation throwable = event.getThrowableInformation();
|
|
||||||
if (throwable == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
boolean isFirst = true;
|
|
||||||
int stackDeep = 0;
|
|
||||||
for (String s : throwable.getThrowableStrRep()) {
|
|
||||||
if (isFirst) {
|
|
||||||
isFirst = false;
|
|
||||||
} else {
|
|
||||||
sb.append(System.getProperty("line.separator"));
|
|
||||||
}
|
|
||||||
sb.append(s);
|
|
||||||
// 最多显示30行
|
|
||||||
if (++stackDeep >= 30) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user