2014-11-18 1 views
0

저는 log4j2를 사용하고 있습니다.RegexFilter log4j2

<Appenders> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <RegexFilter regex=".*\\binsert\\b.*|.*\\bupdate\\b.*|.*\\bdelete\\b.*" onMatch="ACCEPT" onMismatch="DENY" /> 
     <PatternLayout pattern="%mdc{usuario} - %m%n" /> 
    </Console> 

    <RollingFile name="file-log" fileName="c:/logs/SIGE.log" 
     filePattern="c:/logs/SIGE-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] [%mdc{usuario}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %m%n</pattern> 
     </PatternLayout> 
     <RegexFilter regex=".*\\binsert\\b.*|.*\\bupdate\\b.*|.*\\bdelete\\b.*" onMatch="ACCEPT" onMismatch="DENY" /> 
     <Policies> 
      <SizeBasedTriggeringPolicy /> 
     </Policies> 
    </RollingFile> 

</Appenders> 
<Loggers> 
    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false"> 
     <AppenderRef ref="STDOUT" /> 
     <AppenderRef ref="file-log" /> 
    </logger> 
    <logger name="org.hibernate.type" level="TRACE" additivity="false"> 
     <AppenderRef ref="STDOUT" /> 
     <AppenderRef ref="file-log" /> 
    </logger>  
</Loggers> 

내 생각 만 업데이트를 기록 삽입 및 최대 절전 모드의 문을 삭제하는 필터링하는 것입니다 : 이것은 내 XML이다. 하지만 이걸로 아무것도 로깅하지 않습니다, 만약 내가 완벽하게 기록 regexfilter 라인을 주석. 마지막으로 최대 절전 모드 릴리스를 사용하고 있습니다. 미리 감사드립니다. Nicolás.

답변

2

정규 표현식은 XML 요소의 속성 값이므로 \ 문자를 Java 언어의 문자열 리터럴과 같이 이스케이프 할 필요는 없지만 문자가 작은 따옴표 (')이거나 double 견적 ("). 이 경우 각각 &apos;&quot;을 사용해야합니다. 1

따라서, 정규 표현식은 다음과 같습니다

<RegexFilter regex=".*\b(insert|update|delete)\b.*" 
      onMatch="ACCEPT" 
      onMismatch="DENY"/> 

노트

  1. http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

    속성 값에 작은 따옴표와 큰 따옴표를 모두 포함하려면 작은 따옴표 또는 작은 따옴표 (')를 "&apos;"으로 큰 따옴표 문자 (")를"&quot; "으로 표시 할 수 있습니다.