gpt4 book ai didi

java - Log4j2 RollingFileAppender 构建器方法返回类型错误

转载 作者:行者123 更新时间:2023-12-02 11:57:38 24 4
gpt4 key购买 nike

使用 Log4j2 库版本 2.9.1。

我正在尝试以编程方式创建RollingFileAppender:

RollingFileAppender appender = RollingFileAppender.newBuilder()
.withName(name)
.withLayout(...some layout...)
.withStrategy(...some strategy...)
.build();

我无法编译它,因为它说该构建器中没有 withStrategy 方法。

如果我重新排序方法调用:

RollingFileAppender appender = RollingFileAppender.newBuilder()
.withStrategy(...some strategy...)
.withName(name)
.withLayout(...some layout...)
.build();

它无法编译,因为它说现在没有 build() 方法。所以看起来这个构建器方法返回一些基础构建器而不是相同的构建器。

临时解决方法是使用通用参数创建单独的方法:

private <B extends RollingFileAppender.Builder<B>> RollingFileAppender createAppender() {
return RollingFileAppender.<B>newBuilder()
.withName("name")
.withStrategy(...some strategy...)
.withLayout(...some layout...)
.build();
}

然后就可以正常工作了。但这不是使用 Builder 的常用方式。

所以问题是:这是一个错误吗?是否有更好的方法来创建 RollingFileAppender 而无需此解决方法?

最佳答案

由于我无法将代码粘贴到评论中,因此将回复移至答案。

我的 Ivy 导入:

<dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.9.1"/>

这是我的代码,它运行良好:

package org.sandbox.log4j;

import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.RollingFileAppender;
import org.apache.logging.log4j.core.appender.rolling.RollingFileManager;
import org.apache.logging.log4j.core.appender.rolling.RolloverDescription;
import org.apache.logging.log4j.core.appender.rolling.RolloverStrategy;
import org.apache.logging.log4j.core.layout.ByteBufferDestination;

import java.util.Map;

public class RollingAppenderNew {
public static void main(String[] args) {
Layout<String> myLayout = new Layout<String>() {
@Override
public byte[] getFooter() {
return new byte[0];
}

@Override
public byte[] getHeader() {
return new byte[0];
}

@Override
public byte[] toByteArray(LogEvent event) {
return new byte[0];
}

@Override
public String toSerializable(LogEvent event) {
return null;
}

@Override
public String getContentType() {
return null;
}

@Override
public Map<String, String> getContentFormat() {
return null;
}

@Override
public void encode(LogEvent source, ByteBufferDestination destination) {

}
};

RolloverStrategy myStrategy = new RolloverStrategy() {
@Override
public RolloverDescription rollover(RollingFileManager manager) throws SecurityException {
return null;
}
};

RollingFileAppender appender = RollingFileAppender.newBuilder()
.withName("MyAppender")
.withLayout(myLayout)
.withStrategy(myStrategy)
.build();
}
}

我认为策略对象可能没有使用正确的基类并使编译器感到困惑。您的布局和策略使用哪些基类?

关于java - Log4j2 RollingFileAppender 构建器方法返回类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com