java 如何让 jboss 显示 log.debug 消息?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11121778/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 03:53:44  来源:igfitidea点击:

How do I get jboss to display log.debug messages?

javajbosslog4j

提问by stackoverflow

myController.java

我的控制器

 private static final Logger log = Logger.getLogger(myController.class
  .getName());
@GET
  @Path("/testDebug")
  public String testDebug(@Context final ServletContext context)
  {
    log.error("This is an error message");
    log.debug("This is a debug message");
    log.fatal("This is fatal message");
    log.warn("This is a warn message");
    log.info("This is a info message");

    return "Test Page.  Debug Mode is on =" + log.isDebugEnabled();
  }

jboss-log4j.xml

jboss-log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4j Configuration                                                  -->
<!--                                                                       -->
<!-- ===================================================================== -->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

   <!-- ================================= -->
   <!-- Preserve messages in a local file -->
   <!-- ================================= -->

   <!-- A time/date based rolling appender -->
   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/server.log"/>
      <param name="Append" value="false"/>

      <!-- Rollover at midnight each day -->
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

          -->
      </layout>
   </appender>

   <!-- ============================== -->
   <!-- Append messages to the console -->
   <!-- ============================== -->

   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="Target" value="System.out"/>
      <param name="Threshold" value="DEBUG"/>

      <layout class="org.apache.log4j.PatternLayout">
         <!-- The default pattern: Date Priority [Category] Message\n -->
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>


   <!-- ================ -->
   <!-- Limit categories -->
   <!-- ================ -->

   <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
   <category name="org.apache">
      <priority value="INFO"/>
   </category>

   <!-- Limit the org.jboss.serial (jboss-serialization) to INFO as its DEBUG is verbose -->
   <category name="org.jboss.serial">
      <priority value="INFO"/>
   </category>

   <!-- Limit the org.jgroups category to WARN as its INFO is verbose -->
   <category name="org.jgroups">
      <priority value="WARN"/>
   </category>

   <!-- Limit the jacorb category to WARN as its INFO is verbose -->
   <category name="jacorb">
      <priority value="WARN"/>
   </category>

   <!-- Limit JBoss categories -->
   <category name="org.jboss">
      <priority value="INFO"/>
      <appender-ref ref="CONSOLE"/>
   </category>



   <!-- Limit the JSR77 categories -->
   <category name="org.jboss.management">
      <priority value="INFO"/>
   </category>

   <!-- This is is the package to myController.java -->
   <category name="com.myPackage.src">
      <priority value="DEBUG"/>
   </category>

   <!-- ======================= -->
   <!-- Setup the Root category -->
   <!-- ======================= -->

   <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
   </root>

</log4j:configuration>

Desired Result

预期结果

when path /testDebugis hit get the message: "This is a debug message"

当路径/testDebug被点击时得到消息:“这是一条调试消息”

Problem:

问题:

I get all message to display exceptdebug

我得到了调试之外的所有消息

10:29:49,440 INFO  [STDOUT] 10:29:49,440 ERROR [myController] This is an error message
10:29:49,440 INFO  [STDOUT] 10:29:49,440 FATAL [myController] This is fatal message
10:29:49,440 INFO  [STDOUT] 10:29:49,440 WARN  [myController] This is a warn message
10:29:49,440 INFO  [STDOUT] 10:29:49,440 INFO  [myController] This is a info message

Why cant I get debug message to display?

为什么我无法显示调试消息?

回答by whyceewhite

Refer to this questionfor updated information on seeing debug logging with Jboss 7.1.1+.

有关使用 Jboss 7.1.1+ 查看调试日志的更新信息,请参阅此问题

Some points:

几点:

  1. Your class myControlleruses the logging as expected. (Another answer claims that you incorrectly instantiated your logger; not true.)

  2. Remove the log4j.xml (or logback.xml etc) configuration file from your project (i.e., from main/resources/META-INF)

  3. In your pom.xml, make sure that your slf4jdependency has a scope of provided(Jboss will provide this). Further, do not include the log4j (or logback etc) implementation dependencies. For example, here's what your logging dependency section may look like:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
        <scope>provided</scope>
    </dependency>
    
  4. Make sure that you have a loggerentry for your package in your standalone/configuration/standalone.xmlfile.

    <logger category="com.myPackage.src">
         <level name="DEBUG"/>
    </logger>
    
  5. Make sure that console-handlerand periodic-rotating-file-handlerhandlers have a level of DEBUG. (By default, they are INFO. They will need to be DEBUG or else your debug statements will be ignored.)

  1. 您的课程myController按预期使用日志记录。(另一个答案声称您错误地实例化了记录器;不是真的。

  2. 从您的项目(即 from main/resources/META-INF)中删除 log4j.xml(或 logback.xml 等)配置文件

  3. 在你的 中pom.xml,确保你的slf4j依赖有一个提供的范围(Jboss 会提供这个)。此外,不要包含 log4j(或 logback 等)实现依赖项。例如,您的日志依赖项部分可能如下所示:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
        <scope>provided</scope>
    </dependency>
    
  4. 确保您的文件中有一个包的记录器条目standalone/configuration/standalone.xml

    <logger category="com.myPackage.src">
         <level name="DEBUG"/>
    </logger>
    
  5. 确保控制台处理程序定期轮换文件处理程序处理程序具有调试级别。(默认情况下,它们是 INFO。它们需要是 DEBUG,否则您的调试语句将被忽略。)

Note, there is a CLI that allows you to update the logging. I do mine manually but it's probably wise to use the CLI.

请注意,有一个 CLI 允许您更新日志记录。我手动完成,但使用 CLI 可能是明智的。

Here's an abbreviated version of what your standalone.xmllogging portion could look like:

这是您的standalone.xml日志记录部分的缩写版本:

    <subsystem xmlns="urn:jboss:domain:logging:2.0">
        <console-handler name="CONSOLE">
            <level name="DEBUG"/>
            <formatter>
                <named-formatter name="COLOR-PATTERN"/>
            </formatter>
        </console-handler>
        <periodic-rotating-file-handler name="FILE" autoflush="true">
            <level name="DEBUG"/>
            <formatter>
                <named-formatter name="PATTERN"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="server.log"/>
            <suffix value=".yyyy-MM-dd"/>
            <append value="true"/>
        </periodic-rotating-file-handler>
        <logger category="com.myPackage.src">
            <level name="DEBUG"/>
        </logger>
        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="FILE"/>
            </handlers>
        </root-logger>
        <formatter name="PATTERN">
            <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
        </formatter>
        <formatter name="COLOR-PATTERN">
            <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
        </formatter>
    </subsystem>

回答by Suraj Chandran

Can you try doing so:

你可以尝试这样做吗:

<category name="com.myPackage.src">
      <priority value="DEBUG"/>
   </category>

回答by James R. Perkins

Your category is defined incorrectly. When you instantiate your logger you're using Class.getName()which returns the fully qualified class name. You define your logger category with only the package name which means debugging is not turned on for the category com.myPackage.src.myController.

您的类别定义不正确。当您实例化您正在使用的记录器时,Class.getName()它会返回完全限定的类名。您仅使用包名称定义记录器类别,这意味着不会为该类别打开调试com.myPackage.src.myController

You need to either change the way you instantiate your logger

您需要更改实例化记录器的方式

private static final Logger log = Logger.getLogger(myController.class.getPackage().getName());

or change your category definition

或更改您的类别定义

<category name="com.myPackage.src.myController">
  <priority value="DEBUG"/>
</category>

On a side not, packages should not have uppercase characters and class names should always begin with an uppercase letter.

另一方面,包不应该有大写字符,类名应该总是以大写字母开头。

回答by Uday Yadav

Detailed information could be found at: https://docs.jboss.org/author/display/AS71/Logging+Configuration
<subsystem xmlns="urn:jboss:domain:logging:1.0">
   <console-handler name="CONSOLE" autoflush="true">
       <level name="DEBUG"/>
       <formatter>
           <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
       </formatter>
   </console-handler>
   <periodic-rotating-file-handler name="FILE" autoflush="true">
       <formatter>
           <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
       </formatter>
       <file relative-to="jboss.server.log.dir" path="server.log"/>
       <suffix value=".yyyy-MM-dd"/>
   </periodic-rotating-file-handler>
   <logger category="com.arjuna">
       <level name="WARN"/>
   </logger>
   [...]
   <root-logger>
       <level name="DEBUG"/>
       <handlers>
           <handler name="CONSOLE"/>
           <handler name="FILE"/>
       </handlers>
   </root-logger>
</subsystem>

1.the changes can be made in standalone.xml 2.the above solution is to show how to see the debug messages of logs in jboss this will solve the above problem

1.可以在standalone.xml中进行更改 2.上面的解决方案是展示如何在jboss中查看日志的调试信息,这样就解决了上面的问题