fix(sj_1.4.0): SnailLog4jAppender删除依赖,解决CVE log4j漏洞

This commit is contained in:
zhengweilin 2025-04-11 10:31:03 +08:00 committed by opensnail
parent 0c97cdada8
commit 076bf0ca15

View File

@ -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();
}
}