我试图在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>当我第一次运行时,日志文件中只有“业务”相关行的日志。后来,我改变了.business的模式(模式在商业单词之前和之后都有)。对于“业务”,日志记录既不发生在文件中,也不发生在控制台上。另外,我的应用程序在没有任何日志记录的情况下终止了。
然后,我试图将模式恢复为“.business”。(模式在业务word之前和之后都是astreik ),此后日志文件上没有日志记录,但是在控制台上打印了所有的日志跟踪。在尝试了很长一段时间后,当我注释掉Regexfilter时,我的日志就会打印在日志文件中。
我不确定这是否是Regexfilter的一个bug,只工作了一次。此外,如果我们不传递任何模式匹配字符,应用程序停止,没有任何日志打印,无论是在控制台或文件。
发布于 2014-08-30 10:22:48
如果您想记录包含“业务”一词的所有事件,那么您应该使用regex .*business.*而不是.*business*.。下面是一个示例:
<RegexFilter regex=".*business.*" onMatch="ACCEPT" onMismatch="DENY"/>关于信息,.*business*.的意思是:任何东西,后面跟着business,然后是s字符0或更长的时间,然后是任何单个字符。
更多解释:
.指的是任何单个字符*意味着0次或更多次.*的意思是任何字符,0次或更多次。https://stackoverflow.com/questions/25576256
复制相似问题