首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegexFilter与RollingFileAppender不能正常工作

RegexFilter与RollingFileAppender不能正常工作
EN

Stack Overflow用户
提问于 2014-08-29 21:05:27
回答 1查看 2.2K关注 0票数 1

我试图在RollingFileAppender中使用Regexfilter。例如,对于第一次匹配,它撤回了记录器,但在那之后,我在文件中记录了不同的文件,但是没有任何记录。下面是我正在使用的内容:

主要班:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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>

当我第一次运行时,日志文件中只有“业务”相关行的日志。后来,我改变了.business的模式(模式在商业单词之前和之后都有)。对于“业务”,日志记录既不发生在文件中,也不发生在控制台上。另外,我的应用程序在没有任何日志记录的情况下终止了。

然后,我试图将模式恢复为“.business”。(模式在业务word之前和之后都是astreik ),此后日志文件上没有日志记录,但是在控制台上打印了所有的日志跟踪。在尝试了很长一段时间后,当我注释掉Regexfilter时,我的日志就会打印在日志文件中。

我不确定这是否是Regexfilter的一个bug,只工作了一次。此外,如果我们不传递任何模式匹配字符,应用程序停止,没有任何日志打印,无论是在控制台或文件。

EN

回答 1

Stack Overflow用户

发布于 2014-08-30 10:22:48

如果您想记录包含“业务”一词的所有事件,那么您应该使用regex .*business.*而不是.*business*.。下面是一个示例:

代码语言:javascript
复制
<RegexFilter regex=".*business.*" onMatch="ACCEPT" onMismatch="DENY"/>

关于信息,.*business*.的意思是:任何东西,后面跟着business,然后是s字符0或更长的时间,然后是任何单个字符。

更多解释:

  • .指的是任何单个字符
  • *意味着0次或更多次
  • 所以.*的意思是任何字符,0次或更多次。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25576256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档