我尝试在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单词前后都有一个streik)改成了。对于“业务”,日志记录不会发生在文件中,也不会发生在控制台上。我的应用程序也终止了,没有任何记录。
然后我尝试将模式恢复为'.business.'(模式在business word之前和之后都有astreik),此后日志文件上没有记录,但在控制台上打印了所有日志跟踪。当我在尝试了很长时间后注解掉Regexfilter时,我的日志被打印在日志文件中。
我不确定这是否是Regexfilter只工作一次的bug。此外,如果我们没有传递任何模式匹配字符,应用程序将停止,而不会在控制台或文件上打印任何日志。
1条答案
按热度按时间d5vmydt91#
如果你想记录所有包含单词“business”的事件,那么你应该使用正则表达式
.*business.*
而不是.*business*.
。下面是一个例子:.*business*.
表示:任何字符,后跟business
,后跟s
字符0次或以上,后跟任何单个字符。更多解释:
.
表示 * 任何单个字符 **
表示 *0次或更多次 *.*
表示 * 任何字符,0次或更多次 *。