dux*_*x-- 5 java jboss logback slf4j
我正在将一个曾经使用 log4j 的应用程序迁移到 logback/slf4j,并且已经遇到了大约 2 周的问题...我做了一个小项目来测试 logback/slf4j 并且效果很好,但是在应用它时由于某种原因对于实际的应用程序来说,它只是不想工作。
我正在使用 JBoss 6.2 并将 EAR 部署到独立/部署目录并启动服务器(这一切都很好,除了我收到此异常这一事实java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext),但无论如何,回到主要问题。
当我运行应用程序时,我将其打印到我指定的日志文件中
10:51:06.752 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider
10:51:06.780 [main] DEBUG o.j.n.r.client.InitialContextFactory - Looking for jboss-naming-client.properties using classloader sun.misc.Launcher$AppClassLoader@194d4313
10:51:06.782 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.endpoint.create.options. has the following options {}
10:51:06.783 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.remote.connectionprovider.create.options. has the following options {}
10:51:06.789 [main] INFO org.xnio - XNIO Version 3.0.7.GA-redhat-1
10:51:06.798 [main] INFO org.xnio.nio - XNIO NIO Implementation Version 3.0.7.GA-redhat-1
10:51:06.815 [main] INFO org.jboss.remoting - JBoss Remoting version 3.2.18.GA-redhat-1
10:51:06.856 [Remoting "config-based-naming-client-endpoint" read-1] DEBUG org.xnio.nio - Started channel thread 'Remoting "config-based-naming-client-endpoint" read-1', selector sun.nio.ch.WindowsSelectorImpl@2668d102
10:51:06.856 [Remoting "config-based-naming-client-endpoint" write-1] DEBUG org.xnio.nio - Started channel thread 'Remoting "config-based-naming-client-endpoint" write-1', selector sun.nio.ch.WindowsSelectorImpl@2b71ee01
10:51:06.915 [main] DEBUG o.j.n.r.client.InitialContextFactory - jboss.naming.client.connect.options. has the following options {}
10:51:07.393 [main] DEBUG org.hornetq.core.client - Trying reconnection attempt 0/1
10:51:07.401 [main] DEBUG org.hornetq.core.client - Trying to connect with connector = org.hornetq.core.remoting.impl.netty.NettyConnectorFactory@b2e86ae, parameters = {port=5445, host=localhost} connector = NettyConnector [host=localhost, port=5445, httpEnabled=false, useServlet=false, servletPath=/messaging/HornetQServlet, sslEnabled=false, useNio=false]
10:51:07.425 [main] DEBUG org.hornetq.core.client - Started Netty Connector version 3.6.6.Final-redhat-1-fd3c6b7
10:51:07.425 [main] DEBUG org.hornetq.core.client - Trying to connect at the main server using connector :TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost
10:51:07.426 [main] DEBUG org.hornetq.core.client - Remote destination: localhost/127.0.0.1:5445
10:51:07.481 [main] DEBUG org.hornetq.core.client - Reconnection successfull
10:51:07.494 [Thread-1 (HornetQ-client-global-threads-272238939)] DEBUG org.hornetq.utils - using dummy address ffffffe9:6c:ffffff84:ffffffb0:2e:-127
10:51:07.496 [main] DEBUG org.hornetq.core.client - ClientSessionFactoryImpl received backup update for live/backup pair = TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost / null but it didn't belong to TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost
10:51:07.779 [Remoting "config-based-naming-client-endpoint" task-3] ERROR o.j.n.r.p.v1.RemoteNamingStoreV1 - Channel end notification received, closing channel Channel ID c0d4d8c1 (outbound) of Remoting connection 6fb0b6e3 to localhost/127.0.0.1:4447
Run Code Online (Sandbox Code Playgroud)
然而!!!这就是打印到我的日志文件中的所有内容,其余的 log.info/log.warn 等...都打印到standalone/log/server.log 文件中
这是我的 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<appender
name="ConsoleAppender"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- Rollover at midnight each day -->
<appender
name="LOG_AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler" /> -->
<file>${my.logPath}/Logs/MYLOG.log</file>
<append>true</append>
<datePattern>'.'yyyy-MM-dd</datePattern>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<!--<encoder>
<pattern><%5p ${obphm.version}> [%d{ISO8601}] %t %c - %m%n</pattern>
</encoder>-->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender
name="ERROR_AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler" /> -->
<file>${my.logPath}/Logs/MYERRORS.log</file>
<append>true</append>
<datePattern>'.'yyyy-MM-dd</datePattern>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<!--<pattern><%5p ${obphm.version}> [%d{ISO8601}] %t %c - %m%n</pattern>-->
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="LOG_AUDIT" />
<appender-ref ref="ERROR_AUDIT" />
<appender-ref ref="ConsoleAppender" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我还尝试制作一个 jboss-deployment-struct.xml 来排除;
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.slf4j" />
<module name="org.slf4j.ext" />
<module name="org.slf4j.jcl-over-slf4j" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" />
</exclusions>
<dependencies>
<module name="ch.qos.logback" />
<module name="org.slf4j.v175" />
</dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
但这似乎没有做任何事情,它仍然出于某种原因尝试访问 org.slf4j.impl...我有 jboss-deployment-struct 耳朵的 META-INF 文件夹,以及 logback.xml 之一ejb 的 ejbmodule 文件夹与 Ear 一起打包(这会使其成为子部署吗?)
我不确定我错过了什么,我希望有人可以帮助
已修复 - 该项目仅部署一个 EAR 文件,该文件旁边打包有 2 个 ejb jar。我的第一次尝试涉及制作一个 jboss-deployment-struct.xml ,其格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>
<!--Exclusions allow you to prevent the server from automatically adding
some dependencies-->
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.slf4j" />
<module name="org.slf4j.ext" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" />
<module name="org.jboss.logmanager"/>
<module name="jcl-over-slf4j"/>
</exclusions>
<dependencies>
<module name="org.slf4j.v175" />
<module name="ch.qos.logback" />
</dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
我尝试了排除/依赖的多种变体,但似乎没有任何效果。
然后,我决定为捆绑在耳朵中的每个 ejb jar 添加子部署(来自其他 2 个项目),并为这些添加排除/依赖项,最后它似乎起作用了。但是,执行此操作后,服务器找不到 logback.xml...也许那是因为我在代码中设置了 joran 配置器,不确定。
这是最新的 jboss-deployment-struct.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment></deployment> <!-- doesnt need anything in here -->
<sub-deployment name="myjar.jar">
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.slf4j" />
<module name="org.slf4j.ext" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" />
<module name="org.jboss.logmanager"/>
<module name="jcl-over-slf4j"/>
</exclusions>
<dependencies>
<module name="org.slf4j.log4j-over-slf4j"/>
<module name="org.slf4j.v175" />
<module name="ch.qos.logback" />
</dependencies>
</sub-deployment>
<sub-deployment name="mysecondjar.jar">
<exclusions>
<module name="jcl-over-slf4j"/>
<module name="org.apache.commons.logging" />
<module name="org.slf4j" />
<module name="org.slf4j.ext" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" />
<module name="org.jboss.logmanager"/>
</exclusions>
<dependencies>
<module name="org.slf4j.log4j-over-slf4j"/>
<module name="org.slf4j.v175" />
<module name="ch.qos.logback" />
</dependencies>
</sub-deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
另外...这里的依赖项是使用 jboss 中的现有模块作为参考定制的。这些可以在你的 jboss_home_install/modules/ 中找到
| 归档时间: |
|
| 查看次数: |
8853 次 |
| 最近记录: |