获取 org.springframework 以停止污染我的日志

Get org.springframework to stop polluting my logs

我正在使用 Payara 4.1 和 Netbeans 8.1。

当我 运行 我的应用程序时,这四行是最先记录的行:

 #!## LogManagerService.postConstruct : rootFolder=/opt/payara41/glassfish
 #!## LogManagerService.postConstruct : templateDir=/opt/payara41/glassfish/lib/templates
 #!## LogManagerService.postConstruct : src=/opt/payara41/glassfish/lib/templates/logging.properties
 #!## LogManagerService.postConstruct : dest=/opt/payara41/glassfish/domains/domain1/config/logging.properties

我在上面给出的最后一个 logging.properties 文件的末尾添加了 org.springframework=WARNING 行,并重新启动了我的服务器。那似乎没有效果。当我打开 asadmin shell /opt/payara41/bin/asadmin 和 运行 list-log-attributes 时,我得到的是:

asadmin> list-log-attributes
com.sun.enterprise.server.logging.GFFileHandler.excludeFields   <>
com.sun.enterprise.server.logging.GFFileHandler.file    <${com.sun.aas.instanceRoot}/logs/server.log>
com.sun.enterprise.server.logging.GFFileHandler.flushFrequency  <1>
com.sun.enterprise.server.logging.GFFileHandler.formatter   <com.sun.enterprise.server.logging.ODLLogFormatter>
com.sun.enterprise.server.logging.GFFileHandler.logtoConsole    <false>
com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles <0>
com.sun.enterprise.server.logging.GFFileHandler.multiLineMode   <true>
com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours    <0>
com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes    <2000000>
com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange    <false>
com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes  <0>
com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging    <false>
handlerServices <com.sun.enterprise.server.logging.GFFileHandler,com.sun.enterprise.server.logging.SyslogHandler>
handlers    <java.util.logging.ConsoleHandler>
java.util.logging.ConsoleHandler.formatter  <com.sun.enterprise.server.logging.UniformLogFormatter>
java.util.logging.FileHandler.count <1>
java.util.logging.FileHandler.formatter <java.util.logging.XMLFormatter>
java.util.logging.FileHandler.limit <50000>
java.util.logging.FileHandler.pattern   <%h/java%u.log>
log4j.logger.org.hibernate.validator.util.Version   <warn>
org.springframework <WARNING>
Command list-log-attributes executed successfully.

我已经尝试了 this SO question 中给出的建议,但没有奏效。我很难过。 :( 我真的不想看到 spring 框架打印的所有那些 INFO 日志记录行。

=== 编辑 ===

这是我的 log4j.properties 中的内容(从 SO 复制):

# Define the root logger with appender file
log4j.rootLogger = DEBUG, stdout

# Define the file appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# Set the name of the logs destination
log4j.appender.stdout.target=System.out

# Set the immediate flush to true (default)
log4j.appender.stdout.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.stdout.Threshold=debug

# Set the append to false, overwrite
log4j.appender.stdout.Append=false

# Define the layout for appender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=%d{yyyy-MM-dd}:%m%n

log4j.logger.org.springframework=WARNING

以下是我将该文件复制到的所有位置:

$PROJECT_DIR/src/log4j.properties
$PROJECT_DIR/src/main/resources/META-INF/log4j.properties
$PROJECT_DIR/src/main/webapp/WEB-INF/log4j.properties
$PROJECT_DIR/src/main/webapp/WEB-INF/classes/log4j.properties
$PROJECT_DIR/target/$PROJECT-1.0/WEB-INF/log4j.properties
$PROJECT_DIR/target/$PROJECT-1.0/WEB-INF/classes/log4j.properties
$PROJECT_DIR/target/$PROJECT-1.0/WEB-INF/classes/META-INF/log4j.properties
$PROJECT_DIR/target/classes/META-INF/log4j.properties
/opt/payara41/glassfish/domains/domain1/config/log4j.properties

此外,我在 Payara UI 中将 log4j.logger.org.springframework=WARNINGorg.springframework=WARNING 添加到 Configurations > server-config > Logger Settings > Module Log Levels。什么都不起作用。 Payara 的服务器日志仍然包含 spring 框架的信息行。

到目前为止,我尝试了所有建议,但无济于事。所以我最终做了一些非常骇人听闻的事情。我编写了自己的日志处理程序并将其安装到 domain1/lib/ext:

package org.springsuppressor;

import java.util.logging.ConsoleHandler;
import java.util.logging.Level;

public class MyHandler extends ConsoleHandler {

  public MyHandler() {
    super();
    setLevel(Level.WARNING);
  }
}

上面的处理程序将所有记录器的日志级别设置为 WARNING。我可以仅针对 spring 框架抑制消息,但我还不需要这样做。