使用RollingFileAppender的RegexFilter无法正常工作

时间:2014-08-29 21:05:27

标签: regex filter log4j2

我正在尝试在RollingFileAppender中使用Regexfilter。对于第一个匹配的实例,它会检索记录器,但之后我会使用不同的模式,但文件中没有记录任何内容。这是我正在使用的:

主类:

public class MainApp {
public static void main(String[] args) {
final Logger logger = LogManager.getLogger(MainApp.class.getName());

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

    HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
    logger.trace("NPF:Trace:Entering Log4j2 Example.");
    logger.debug("NTL:debug Entering Log4j2 Example.");
    obj.getMessage();   
    Company comp = new Company();
    comp.setCompName("ANC");
    comp.setEstablish(1889);

    CompanyBusiness compBus = (CompanyBusiness)context.getBean("compBus");
    compBus.finaceBusiness(comp.getCompName(), comp.getEstablish());
    logger.trace("NTL: Trace: Exiting Log4j2 Example.");
   }
}

log4j2.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
<Appenders>
         <Console name="STDOUT" target="SYSTEM_OUT">
             <PatternLayout pattern="%d{yyyy-MM-dd [%t] HH:mm:ss} %-5p %c{1}:%L - %m%X%n" />
    </Console>
    <RollingFile name="RollingFile" fileName="C:\logTest\runtime\tla\els3.log"  append="true" filePattern="C:\logTest\runtime\tla\els3-%d{yyyy-MM-dd}-%i.log" >
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%X%n" />
            <RegexFilter regex=".*business*." onMatch="ACCEPT" onMismatch="DENY"/>  
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>         
        </RollingFile>      
</Appenders>
<Loggers>
    <Logger name="com.anc" level="trace"/>  
    <Root level="trace"> 
            <AppenderRef ref="STDOUT" /> 
            <AppenderRef ref="RollingFile"/> 
    </Root> 
 </Loggers>
</Configuration>

当我第一次运行时,在我的日志文件中,我得到的日志只有&#34; business&#34;相关线。后来我改变了模式。 business (模式在商业词之前和之后都有astreik)。对于&#34; business&#34;,日志记录不会发生在文件中,也不会发生在控制台上。此外,我的应用程序在没有任何记录的情况下终止。

然后我尝试将模式恢复为&#39;。业务。&#39; (模式在业务词之前和之后都有astreik),此后日志文件上没有记录,但在控制台上打印了所有日志跟踪。当我在长时间尝试后注释掉Regexfilter时,我的日志被打印在日志文件中。

我不确定这是否只是一次Regexfilter的错误。此外,如果我们不传递任何模式匹配字符,应用程序将在控制台或文件上停止而不进行任何日志打印。

1 个答案:

答案 0 :(得分:1)

如果您要记录包含单词&#34; business&#34;的所有事件,那么您应使用正则表达式.*business.*而不是.*business*.。这是一个例子:

<RegexFilter regex=".*business.*" onMatch="ACCEPT" onMismatch="DENY"/>

有关信息,.*business*.表示:任何内容,后跟business,后跟s字符0或更长时间,后跟任何单个字符。

更多解释:

  • .表示任何单个字符
  • *表示 0次或更多次
  • 所以.*表示任何字符,0次或更多次