2014-08-29 1 views
0

RollingFileAppender에서 Regexfilter를 사용하려고합니다. 첫 번째 일치하는 인스턴스의 경우 로거를 다시 수집했지만 그 이후에는 다른 패턴이 있지만 파일에는 아무 것도 기록되지 않습니다. 여기 내가 사용하고있는 것입니다 :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> 

내가 처음 실행하면, 내 로그 파일에 난 단지 가진 로그를 얻었다 "사업 "관련 선. 늦게 나는 그 후퇴를 바꾸었다. 사업 (패턴에 비즈니스 단어 전후에 astreik이 있음). "비즈니스"로깅은 파일이나 콘솔에서 발생하지 않았습니다. 내 응용 프로그램도 로깅없이 종료되었습니다.

그런 다음 패턴을 ''로 되돌리려했습니다. 사업. ' (패턴은 비즈니스 단어 전후에 astreik을 가짐), 이후에는 로그 파일에 로깅이 발생하지 않았지만 콘솔에서는 모든 로그 추적이 인쇄됩니다. 오랫동안 시도한 후에 Regexfilter를 주석 처리하면 내 로그가 로그 파일에 인쇄됩니다.

Regexfilter의 버그인지 한번 확실하지 않습니다. 또한 일치하는 문자를 전달하지 않으면 콘솔이나 파일에서 로그 인쇄없이 응용 프로그램이 중지됩니다.

답변

1

"business"라는 단어가 포함 된 모든 이벤트를 기록하려면 .*business*. 대신 정규식 .*business.*을 사용해야합니다.

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

, .*business*. 수단 : business 다음 것도, s 문자 0 이상의 시간 뒤에 단일 문자 뒤에 다음 예이다. 설명

더 :

  • .

    단일 문자 수단
  • *0 회 이상
  • 그래서 .* 수단 모든 문자, 0 회 이상을 의미한다.