다음 메시지를 로그 파일로 리디렉션하고 싶습니다.
"[example]:[foo][bar]: "
"[example]:[foo][hello]: "
"[example]:[foo][world]: "
"[example]:[foo][other]: "
"[example]:[foo][text]: "
의 내용은 3rd field
소문자 [az]만 포함하는 동적 텍스트입니다.
"[example]:[foo][.*]: "
contains
" " 키워드를 사용하여 rsyslog conf 파일을 생성하면 작동합니다.
:msg, contains, "[example]:[foo]" -/var/log/example.log
그러나 다음 정규식은 전혀 작동하지 않으며 메시지가 기록되지 않습니다.
:msg, regex, "\[example\]\:\[foo\]\[.*\]\:\ " -/var/log/example.log
내 정규 표현식에 어떤 문제가 있나요?
위의 메시지와 일치하고 모든 필수 필드를 포함하도록 올바른 정규식을 작성하려면 어떻게 해야 합니까?
답변1
문제는 필터 명령 처리가 백슬래시 이스케이프를 해석하는 두 단계로 구성된다는 것입니다. 결과적으로 리터럴을 일치시키려는 경우 [
정규식 패턴은 이지만 \[
패턴을 문자열로 제공하므로 사용해야 하는 백슬래시를 이스케이프해야 합니다 \\[
.
:
, 또는 공백을 벗어날 필요가 없으므로 ]
다음을 사용할 수 있습니다.
:msg, regex, "\\[example]:\\[foo]\\[.*]: " -/var/log/example.log