【问题标题】:How do I tell what logfile JBOSS is using for my WAR file?我如何知道 JBOSS 为我的 WAR 文件使用的日志文件是什么?
【发布时间】:2014-08-07 22:18:26
【问题描述】:

我正在使用 JBoss 7。 我在 jboss/standalone/deployment 中部署了一个 WAR 文件。使用 ./standalone.sh 运行,它将大量日志信息打印到终端窗口。

我正在尝试调整日志记录属性,但没有成功。我尝试在 modules/com/company/warname 目录中编辑 log4j.properties 文件,但它没有任何效果。

我尝试通过将日志记录级别提高到 ERROR 来修改 jboss/standalone/configuration 中的 logging.properties 文件,但这似乎也没有做任何事情。 (我每次都在重新启动 jboss)。我的日志仍然充斥着 INFO 和 WARN 级别的警报。

在终端的最顶部,在“jboss bootstrap environment”打印之后,我确实看到了以下行:

log4j: Default initialization of overridden by log4j.defaultInitOverrideproperty.

默认初始化...什么?

【问题讨论】:

  • 尝试配置 jboss-deployment-structure.xml 进行日志记录。

标签: logging jboss log4j


【解决方案1】:

需要澄清的几点:

  • JBoss 中的 logging.properties 仅在日志子系统(稍后将提供更多信息)启动并运行之前存在,在这种情况下子系统将接管
  • 您为 log4j.properties 引用的位置似乎很奇怪,因为您引用的是 module/...,而这应该主要是为模块保留的路径,而不是您的应用程序本身(可能与独立与域有关,因为我更熟悉后者,但这值得怀疑。

因此假设您的应用程序 log4j 配置未考虑在内:

日志管理是通过日志子系统完成的

例如通过 CLI 界面管理它,因为您专注于终端窗口输出:

[standalone@localhost:9999 /] /subsystem=logging/console-handler=CONSOLE:read-resource(recursive=true)
{
    "outcome" => "success",
    "result" => {
        "autoflush" => true,
        "enabled" => true,
        "encoding" => undefined,
        "filter" => undefined,
        "filter-spec" => undefined,
        "formatter" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n",
        "level" => "INFO",
        "name" => "CONSOLE",
        "named-formatter" => "COLOR-PATTERN",
        "target" => "System.out"
    }
}

所以如果你在那里更新关卡:

[standalone@localhost:9999 /] /subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=WARN)

控制台的级别将设置为警告。

更多关于更精细配置的信息:

JBoss 中的日志记录机制遵循“分层”方法,您可以定义 loggers(始终有一个默认的 ROOT 记录器)来定义每个类别的日志记录行为。 记录器根据类别和级别过滤消息,并根据它们的配置将它们发送到 handlers,它们可以使用与链接到 ROOT 记录器的处理程序相同的处理程序,或链接到特定的处理程序(s) 如果愿意。 您通常至少有 CONSOLE 处理程序和 FILE 处理程序,但如果需要,可以添加其他处理程序

默认独立安装中的记录器列表:

[standalone@localhost:9999 /] /subsystem=logging:read-children-names(child-type=logger)
{
    "outcome" => "success",
    "result" => [
        "com.arjuna",
        "jacorb",
        "jacorb.config",
        "org.apache.tomcat.util.modeler",
        "org.jboss.as.config",
        "sun.rmi"
    ]
}

org.jboss.as.config为例:

[standalone@localhost:9999 /] /subsystem=logging/logger=org.jboss.as.config:read-resource()
{
    "outcome" => "success",
    "result" => {
        "category" => "org.jboss.as.config",
        "filter" => undefined,
        "filter-spec" => undefined,
        "handlers" => undefined,
        "level" => "DEBUG",
        "use-parent-handlers" => true
    }
}

这意味着对于 org.jboss.as.config,日志级别设置为 DEBUG,而 use-parents-handlers 意味着在此记录器的父级上定义的处理程序也将用于此记录器。

所以对于这个类别,所有 DEBUG 及以上级别的消息都会发送到处理程序,处理程序将应用它们的过滤器来决定是否输出消息。 在我们的例子中,我们将 CONSOLE 处理程序级别设置为 WARN,因此所有低于 WARN 的消息都将被过滤掉。

希望这能回答您的问题,或者至少为您提供一些在尝试解决问题时需要考虑的要点。

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2014-12-24
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多