RegexFilter与RollingFileAppender不能正常工作

q8l4jmvw  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(101)

我尝试在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。此外,如果我们没有传递任何模式匹配字符,应用程序将停止,而不会在控制台或文件上打印任何日志。

d5vmydt9

d5vmydt91#

如果你想记录所有包含单词“business”的事件,那么你应该使用正则表达式.*business.*而不是.*business*.。下面是一个例子:

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

.*business*.表示:任何字符,后跟business,后跟s字符0次或以上,后跟任何单个字符。
更多解释:

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

相关问题