我无法创建类的实例,因为不知道如何通过log4j.xml在createAppender方法中传递所需的参数。
例外:
ru.appliedtech.desktopapp.client.ui.menu.JTextAreaAppender中的构造函数的参数0需要找不到类型为'java.lang.String'的bean。考虑在配置中定义类型为“ java.lang.String”的bean。
@Plugin(name = "JTextAreaAppender", category = "Core", elementType = "appender", printObject = true)
@Configuration
@ComponentScan("ru.appliedtech")
public class JTextAreaAppender extends AbstractAppender
{
private int maxLines = 0;
private static volatile ArrayList<JTextArea> jTextAreaList = new ArrayList<>();
protected JTextAreaAppender(String name, Filter filter, Layout<? extends Serializable> layout, boolean ignoreExceptions, Property[] properties)
{
super(name, filter, layout, ignoreExceptions, properties);
}
@PluginFactory
public static JTextAreaAppender createAppender(@PluginAttribute("name") String name,
@PluginAttribute("ignoreExceptions") boolean ignoreExceptions,
@PluginElement("Layout") Layout<?> layout,
@PluginElement("Filters") Filter filter,
@PluginElement("Properties") Property[] properties) {
return new JTextAreaAppender(name, filter, layout, ignoreExceptions, properties);
}
/**
* add the target JTextArea to be populated and updated by the logging information
* @param textArea text area
*/
public static void addTextArea(final JTextArea textArea) {
JTextAreaAppender.jTextAreaList.add(textArea);
}
@Override
public void append(LogEvent event)
{
//
}
}
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" packages="ru.appliedtech.desktopapp.client.ui.menu">
<Properties>
<Property name="APP_LOG_ROOT">ru.appliedtech</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<JTextAreaAppender name="textArea">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %msg%n">
</PatternLayout>
</JTextAreaAppender>
</Appenders>
<Loggers>
<Root level="ERROR">
<AppenderRef ref="console" level="ERROR"/>
<AppenderRef ref="textArea" level="ERROR"/>
</Root>
</Loggers>
</Configuration>
答案 0 :(得分:0)
该错误消息是来自Log4j还是Spring?为什么在应该由Log4j实例化的类上具有Spring注释?
答案 1 :(得分:0)
rgoers是正确的,您在Log4j Plugin类上具有Spring注释很奇怪。
@Configuration
和@ComponentScan
不应该在那里。首先删除那些。
顺便说一句,有时(在调试log4j2配置时)将状态设置为DEBUG
就像
<Configuration status="ERROR"
如果无法识别您的插件,则可能是您的注释处理无效。如果您使用的是Gradle,请确保将log4j-core
添加为annotationProcessor
依赖项。
annotationProcessor 'org.apache.logging.log4j:log4j-core'
如果使用的是IntelliJ,请确保在“首选项”->“构建,执行,部署”->“编译器”->“注释处理器”->“启用注释处理”中启用注释处理。
如果还好,Log4J应该检测到您的Appender插件,这是此问题的主题。