猿问

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

我无法创建我的类的实例,因为不知道如何在 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>



慕容森
浏览 132回答 2
2回答

holdtom

rgoers 是对的,您的 Log4j 插件类上有 Spring 注释很奇怪。&nbsp;@Configuration不@ComponentScan应该在那里。先把那些去掉。顺便说一下,有时(在调试 log4j2 配置时)将状态设置为DEBUGlike很有用<Configuration&nbsp;status="ERROR"如果您的插件未被识别,可能是您没有进行注释处理。如果您使用的是 Gradle,请务必添加log4j-core为annotationProcessor依赖项。annotationProcessor&nbsp;'org.apache.logging.log4j:log4j-core'如果您使用的是 IntelliJ,请务必在 Preferences -> Build,Execution, Deployment -> Compiler -> Annotation Processors -> Enable annotation processing 中启用 Annotation processing。如果没问题,Log4J 应该会检测到您的 Appender 插件,这是本问题的主题。

饮歌长啸

该错误消息是来自 Log4j 还是 Spring?为什么在应该由 Log4j 实例化的类上有 Spring 注释?
随时随地看视频慕课网APP

相关分类

Java
我要回答