【问题标题】:not able to create separate log files according to the levels with the xml in log4j无法根据 log4j 中的 xml 级别创建单独的日志文件
【发布时间】:2015-06-17 12:34:12
【问题描述】:

我正在尝试在 Struts 2 中使用 log4j 创建一个小型应用程序。我想为不同级别创建不同的日志文件。 但我得到的是一个包含所有消息的日志文件。

以下是我项目的 XML -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="FTP" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="/home/stpl/Desktop/jboss-4.2.2.GA_new  /server/default/ftp.log"/>
      <param name="Append" value="true"/>
      <param name="DatePattern" value="'.'yyyy-MM-dd"/>
      <layout class="org.apache.log4j.PatternLayout">         
    	  <param name="ConversionPattern" value="%d   %5p   [%c] %t  %x %m%n"/>     
      </layout>
      <filter class="org.apache.log4j.filter.LevelRangeFilter">
          <param name="LevelMin" value="DEBUG"/>
          <param name="LevelMax" value="FATAL"/>
        </filter>
   </appender>
   <!--messages to the console-->

   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="Target" `enter code here`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>
   
   <logger name="com.opensymphony.xwork2">
	   <level value="INFO" />
	   <appender-ref ref="fileAppenderInfo" />
	   <appender-ref ref="consoleAppenderInfo" />
    </logger>
	    
    <logger name="org.apache.struts2">
	   <level value="INFO" />
	   <appender-ref ref="fileAppenderInfo" />
	   <appender-ref ref="consoleAppenderInfo" />
     </logger>

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

</log4j:configuration>

【问题讨论】:

  • 为了拥有多个文件,您需要创建多个文件附加程序。目前您有 ove 文件附加程序和三个记录器。
  • 我将如何在 apender 中设置特定文件的级别?
  • 还有一个问题。当我清除日志文件并运行我的项目时,该文件中没有添加任何日志消息。

标签: java xml logging jboss log4j


【解决方案1】:

在所需的最低级别(跟踪、调试)上启用日志记录。使用多个文件附加程序。在每个 appender 上使用阈值过滤器来过滤较低级别的事件。

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="debugAppender" class="org.apache.log4j.FileAppender"> 
        <param name="File" value="/logs/debug.log"/> 
        <param name="Threshold" value="debug"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c{1} : %m%n"/> 
        </layout> 
    </appender> 

    <appender name="errorAppender" class="org.apache.log4j.FileAppender"> 
        <param name="File" value="/logs/error.log"/> 
        <param name="Threshold" value="error"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c{1} : %m%n"/> 
        </layout> 
    </appender> 

    <root> 
        <level value="debug"/> 
        <appender-ref ref="errorAppender" /> 
        <appender-ref ref="debugAppender" /> 
    </root> 
</log4j:configuration>

这样 debug appender 会记录来自 root logger 的所有内容,而 errorAppender 会记录错误级别或更高级别的所有内容。

现在这不会从调试日志中过滤掉错误事件,但您始终可以使用DynamicThresholdFilter 进行更复杂的过滤。

【讨论】:

  • 使用上面的代码没有任何反应。任何文件都没有更新数据。虽然我也使用过 consoleAppender 但控制台上没有显示任何消息。
  • 我的 log.xml 文件放在 scr 文件夹下。但我认为应该写在 /jboss-log4j.xml 文件中。
  • 当我使用 jboss-log4j.xml 文件配置我的项目时,这将起作用。并以此将日志按级别分隔。但是当我在 src 文件夹中写入 xml 文件时,它不会与我的项目一起配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多