18

我使用了 tomcat 并简单地覆盖了默认的日志系统。如何在我的 Spring 应用程序中使用 Wildfly 上的 logback 启用日志记录?

我的 Logback.xml 在 tomcat 上运行

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="WARN" />
    <logger name="com.citronium.planstery" level="INFO" />
    <logger name="org.apache.http.impl.conn.tsccm" level="ERROR" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
4

2 回答 2

34

您可以使用 logback 在您的应用程序中配置日志记录。您不能使用 logback 为服务器配置日志记录。

要在您的配置中使用 logback,您需要将其更改add-logging-api-dependenciesfalse或创建一个jboss-deployment-structure.xml排除子系统的。您还需要在部署中包含 logback 和 slf4j。

更改的第一个选项add-logging-api-dependencies是所有部署的全局设置。以下 CLI 命令将更改该值:

/subsystem=logging:write-attribute(name=add-logging-api-dependencies,value=false)

此选项根本不会将任何隐式日志记录依赖项添加到您的部署中。

使用 a 的第二个选项jboss-deployment-structure.xml将仅为您的部署禁用日志记录子系统。以下是一个示例文件:

<jboss-deployment-structure>
  <deployment>
     <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
     <exclude-subsystems>
        <subsystem name="logging" />
    </exclude-subsystems>
  </deployment>
</jboss-deployment-structure>
于 2014-02-19T17:12:15.827 回答
5

这是我们如何做到这一点的,顺便说一下,我们使用的是 wildfly-8.1.0-Final。

首先,制作一个包含这个类的jar文件: https ://gist.github.com/xiaodong-xie/219491e0b433f8bd451e

然后把这个jar文件放到“wildfly-8.1.0.Final/modules/system/layers/base/org/jboss/logmanager/main”中,在module.xml文件中添加对这个jar文件的引用,一模一样文件夹。

然后将“logback-classic-1.1.2.jar”和“logback-core-1.1.2.jar”(您可以使用您选择的任何版本的logback)放入“wildfly-8.1.0.Final/modules/system/ layers/base/org/jboss/logmanager/main",并在 module.xml 文件中引用这两个 jar 文件。

将以下内容添加到您正在使用的standalone.xml 中的“subsystem:logging”中:

<custom-handler name="logback" class="org.slf4j.bridge.SLF4JBridgeHandler" module="org.jboss.logmanager"></custom-handler>

并在以下根记录器元素中引用此处理程序:

        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="logback"/>
            </handlers>
        </root-logger>

这是 logback.xml 的示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>

<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${JBOSS_HOME}/standalone/log/server-logback.log</file>
    <append>true</append>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="LOGFILE"/>
</appender>
<root level="INFO">
    <appender-ref ref="ASYNC"/>
</root>
</configuration>

并将这个 logback.xml 文件放入“wildfly-8.1.0.Final/standalone/configuration”文件夹。

将以下内容添加到“wildfly-8.1.0.Final/bin”文件夹中的“standalone.sh”或等效文件中。

-Dlogback.configurationFile=file:$JBOSS_CONFIG_DIR/logback.xml

就在“-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties”行下。“standalone.sh”文件中有两个地方。

==================================================== ================================

或者你可以用更简单的方式来做。:)

将2个logback jar文件放入“jboss.logmanager”模块,在“standalone.sh”文件中添加“-Dorg.jboss.logging.provider=slf4j”,位置相同。

顺便说一句,我发现如果这样做会丢失一些日志记录,因为如果这样做,Wildfly 本身仍然使用自己的日志记录工具。

玩得开心。:-)

于 2014-10-13T14:19:11.803 回答