我正在尝试在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的错误。此外,如果我们不传递任何模式匹配字符,应用程序将在控制台或文件上停止而不进行任何日志打印。
答案 0 :(得分:1)
如果您要记录包含单词&#34; business&#34;的所有事件,那么您应使用正则表达式.*business.*
而不是.*business*.
。这是一个例子:
<RegexFilter regex=".*business.*" onMatch="ACCEPT" onMismatch="DENY"/>
有关信息,.*business*.
表示:任何内容,后跟business
,后跟s
字符0或更长时间,后跟任何单个字符。
更多解释:
.
表示任何单个字符 *
表示 0次或更多次 .*
表示任何字符,0次或更多次。