无法抑制 jar 的日志输出
Trouble suppressing log output from a jar
我正在构建一个利用 expect4j 库的 JSF 应用程序,并且很难抑制 glassfish 服务器日志中的输出。我尝试根据 expect4j 的 logging.properties 文件在我的 src/main/resources 目录中创建一个 logging.properties 文件。我还尝试创建一个 log4j2.xml 文件来完成同样的事情。我什至尝试根据我通过研究发现的另一个 post 将 log4j2.xml 文件移动到 web.xml 旁边的 WEB-INF 目录。
我想抑制它,因为它会在 info/debug 级别生成大量消息。这是消息的示例:
[2016-06-25T14:36:06.195-0600] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=225 _ThreadName=Thread-8] [timeMillis: 1466886966195] [levelValue: 800] [[4229 [__ejb-thread-pool5] DEBUG expect4j.Expect4j - Found EOF]]
查看 expect4j,它似乎只依赖于 slf4j,所以我将 log4j2 定义为我的记录器应该没有任何问题。
这是我在我的 maven 项目中包含的以下依赖项:
- expect4j : 1.6
- slf4j-log4j12 : 1.7.7
- jstl : 1.2
- jstl-api : 1.2-rev-1
- javax.ejb-api : 3.2
- jsf-api : 2.2.8-02
- jsf-impl : 2.2.8-02
- primefaces : 5.2
- log4j-web : 2.6.1
这是我的 logging.properties 文件中的内容:
handlers=java.util.logging.ConsoleHandler
.level=INFO
java.util.logging.ConsoleHandler.level=INFO
#expect4j.handler=java.util.logging.ConsoleHandler
expect4j.level=SEVERE
这是我的 log4j2.xml 文件中的内容:
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="STDOUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="expect4j" level="error" additivity="false">
<AppenderRef ref="Console" />
</Logger>
<Root level="warn">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
我确实看过这个 link,但是当我连接到我的 glassfish 服务器时,我没有看到它在 jconsole 中指出的任何内容。 Suppress java util logging from 3rd party jar.
感谢您提供的任何帮助。
您正在使用 slf4j-log4j12 将所有 slf4j 输出路由到 log4j 1.x。相反,您应该使用 log4j-slf4j-impl。如果 expect4j 使用 slf4j,则不需要 logging.properties。虽然 log4j-slf4j-impl 应该包含它们,但您还应该包含 log4j-api 和 log4j-core jar。如果您希望 java util 日志输出也定向到 log4j 2,那么还包括 log4j-jul jar。
我正在构建一个利用 expect4j 库的 JSF 应用程序,并且很难抑制 glassfish 服务器日志中的输出。我尝试根据 expect4j 的 logging.properties 文件在我的 src/main/resources 目录中创建一个 logging.properties 文件。我还尝试创建一个 log4j2.xml 文件来完成同样的事情。我什至尝试根据我通过研究发现的另一个 post 将 log4j2.xml 文件移动到 web.xml 旁边的 WEB-INF 目录。
我想抑制它,因为它会在 info/debug 级别生成大量消息。这是消息的示例:
[2016-06-25T14:36:06.195-0600] [glassfish 4.1] [INFO] [] [] [tid: _ThreadID=225 _ThreadName=Thread-8] [timeMillis: 1466886966195] [levelValue: 800] [[4229 [__ejb-thread-pool5] DEBUG expect4j.Expect4j - Found EOF]]
查看 expect4j,它似乎只依赖于 slf4j,所以我将 log4j2 定义为我的记录器应该没有任何问题。
这是我在我的 maven 项目中包含的以下依赖项:
- expect4j : 1.6
- slf4j-log4j12 : 1.7.7
- jstl : 1.2
- jstl-api : 1.2-rev-1
- javax.ejb-api : 3.2
- jsf-api : 2.2.8-02
- jsf-impl : 2.2.8-02
- primefaces : 5.2
- log4j-web : 2.6.1
这是我的 logging.properties 文件中的内容:
handlers=java.util.logging.ConsoleHandler
.level=INFO
java.util.logging.ConsoleHandler.level=INFO
#expect4j.handler=java.util.logging.ConsoleHandler
expect4j.level=SEVERE
这是我的 log4j2.xml 文件中的内容:
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="STDOUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="expect4j" level="error" additivity="false">
<AppenderRef ref="Console" />
</Logger>
<Root level="warn">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
我确实看过这个 link,但是当我连接到我的 glassfish 服务器时,我没有看到它在 jconsole 中指出的任何内容。 Suppress java util logging from 3rd party jar.
感谢您提供的任何帮助。
您正在使用 slf4j-log4j12 将所有 slf4j 输出路由到 log4j 1.x。相反,您应该使用 log4j-slf4j-impl。如果 expect4j 使用 slf4j,则不需要 logging.properties。虽然 log4j-slf4j-impl 应该包含它们,但您还应该包含 log4j-api 和 log4j-core jar。如果您希望 java util 日志输出也定向到 log4j 2,那么还包括 log4j-jul jar。