WebSphere上的应用程序调试级别日志消息

时间:2018-03-13 03:43:39

标签: websphere websphere-8

我刚刚开始维护部署在WebSphere enterprise(V8.5)上的Spring应用程序。这是我第一次使用容器。我需要在调试级别中有日志消息来跟踪错误。错误日志消息显示在trace.log中。在系统管理员将容器日志级别配置为调试之后,我们不会看到任何调试级别日志消息。应用程序没有日志属性文件,尽管log4j和Slf4j是它的依赖项。我添加了一个log4j.properties文件,它配置日志文件输出和控制台输出。但是,我根据系统管理员在控制台上看不到日志文件或任何日志消息。在我看来,调试日志级别配置在Websphere中是特殊的。如何解决这个日志级配置问题?

以下是Java代码段

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

class MyClass {

  private static final Logger log = LoggerFactory.getLogger(MyClass.class);

  public void method01(){

    log.debug("....");
}

和属性文件:

# Root logger option
log4j.rootLogger=DEBUG, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=${SERVER_LOG_ROOT}/portal-server.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C:%M:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %C:%M:%L - %m%n  

注意:$ {SERVER_LOG_ROOT}被容器盒上的实际路径替换,但也没有运气。

1 个答案:

答案 0 :(得分:0)

您的应用程序通过slf4j日志记录界面使用log4j logger。这是一个非常标准的设置。 WebSphere不会干扰这种日志记录配置。

这些是正确设置此配置的步骤:

  1. 首先从项目中排除commons-logging依赖项。它是Spring和各种不同项目所需的流行日志记录界面。相反,我们将使用slf4j。

  2. 将依赖项添加到:

    • slf4j-api - 我们的日志界面
    • jcl-over-slf4j - commons-logging implementation
    • slf4j-log4j12 - sl4j log4j bridge
    • log4j - logging api
  3. 在/WEB-INF/log4j.properties位置创建log4j.properties。

  4. Bootstrap log4j。在Spring Web应用程序中引导的最简单方法是使用Log4jConfigListener实用程序类。将以下条目添加到web.xml。您应该在web.xml的最顶部添加它,以便在其他任何事情发生之前引导日志记录。

  5. <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
    

    就是这样。这应该有用。

    现在日志记录正在运行,您应该在开发期间使用控制台日志记录进行更详细的配置;最简单的部署日志。最简单的方法是使用参数化配置log4j.properties:

    log4j.rootLogger=${LOG4J_SERVER_LOGLEVEL}, fileAppender
    
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    ... console appender configuration ...
    log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender
    ... file appender configuration ..
    

    在生产中,LOG4J_SERVER_LOGLEVEL环境变量设置为“INFO”。在我的开发机器上,它被设置为“DEBUG,console”。这样服务器只记录到fileAppender,开发计算机记录到console和fileAppender。

    您始终可以添加更多环境变量来微调特定记录器,甚至可以将log4j.properties设置为外部,并将“file:”位置提供为 param-value 。在外部log4j.properties的情况下,可以设置Log4jConfigListener来监视log4j属性的变化并实时更改日志记录配置。

    这些都不是特定于WebSphere的,并且这些步骤在任何Java Web容器中都是相同的。现在,如果您需要日志记录可以从WebSphere控制台进行配置,那么您可以通过使用jul logger替换log4j来实现此目的。 WebSphere为“日志和跟踪”部分下的jul日志记录提供了管理界面。