【问题标题】:Where to put logback.xml in a Java EE application in WildFly 14在 WildFly 14 的 Java EE 应用程序中将 logback.xml 放在哪里
【发布时间】:2019-03-01 17:30:48
【问题描述】:

我有一个包含 EAR、WAR 和 EJB 包的 Java EE 应用程序。

我通过在 EJB 类中定义 @Produces 方法来配置 logback,如下所示:

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

@Named
@Singleton
public class LoggerProducer {

    @Produces
    public Logger produceLogger(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(injectionPoint.getMember()
                                       .getDeclaringClass().getName());
    }

}

这很好用,注入接口

@Inject
private Logger logger;

和日志记录

logger.error("This is the error");

我的pom.xml 中有这些依赖项:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

现在,我正在尝试在部署中包含一个 logback.xml 文件,我将它添加到 EJB 类路径中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

但它不起作用,它以标准/默认格式记录。

我将以下 jboss-deployment-structure.xml 文件添加到 EJB/META-INF 文件夹以排除日志记录:

<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="logging"/>
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

但它也不起作用。如果我将 jboss-deployment-structure.xml 放在 EAR/META-INF 中,我会在启动时收到以下错误(仅指向 WAR 类):

org.jboss.weld.exceptions.DeploymentException: WELD-001408: 带有限定符 @Default 的 Logger 类型的依赖关系不满足

logback.xml 文件放在哪里?如何配置jboss-deployment-structure.xml文件以及放在哪里?

【问题讨论】:

    标签: java jakarta-ee jboss wildfly logback


    【解决方案1】:

    将它放在资源文件夹或运行时类路径上的任何文件夹中(CLASSPATH 系统变量应该有一个条目)。例如,让您的“make”文件将其复制到 WEB-INF/classes(虽然不是一个很好的选择)。

    【讨论】:

    • 由于 @Produces 类在 EJB 中,我更喜欢将它放在那个包中而不是 WAR 中的 WEB-INF/类中,我可以把它放在哪里?
    • 更好的方法是将其外部化并使其成为应用程序启动的一部分。 -Dlogback.configurationFile=/path/to/config.xml。请参阅此链接logback.qos.ch/faq.html#configFileLocation 和此帖子stackoverflow.com/questions/50757241/…
    • 我可以将它添加为变量,但是如果 logback.xml 在 /path/to/config 文件夹中,我应该将它放在哪里?这个文件夹在 EAR 或 EJB 中的什么位置?
    • 我对wildfly不太了解,但是如果你有依赖冲突,你需要排除其中一个(如果你使用maven,我更愿意在你的pom中排除无意的WildFly的slf4j) .
        ... ch.qos.logbacklogback-classic
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多