为了账号安全,请及时绑定邮箱和手机立即绑定

使用 spring boot 创建自定义附加程序以将日志消息输出到文本区域

使用 spring boot 创建自定义附加程序以将日志消息输出到文本区域

慕容森 2023-05-17 17:47:38
我无法创建我的类的实例,因为不知道如何在 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>
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

rgoers 是对的,您的 Log4j 插件类上有 Spring 注释很奇怪。 @Configuration@ComponentScan应该在那里。先把那些去掉。顺便说一下,有时(在调试 log4j2 配置时)将状态设置为DEBUGlike很有用

<Configuration status="ERROR"

如果您的插件未被识别,可能是您没有进行注释处理。如果您使用的是 Gradle,请务必添加log4j-coreannotationProcessor依赖项。

annotationProcessor 'org.apache.logging.log4j:log4j-core'

如果您使用的是 IntelliJ,请务必在 Preferences -> Build,Execution, Deployment -> Compiler -> Annotation Processors -> Enable annotation processing 中启用 Annotation processing。

如果没问题,Log4J 应该会检测到您的 Appender 插件,这是本问题的主题。


查看完整回答
反对 回复 2023-05-17
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

该错误消息是来自 Log4j 还是 Spring?为什么在应该由 Log4j 实例化的类上有 Spring 注释?



查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信