![rsyslog conf의 [][][.*]에서는 정규식이 작동하지 않습니다.](https://linux55.com/image/212013/rsyslog%20conf%EC%9D%98%20%5B%5D%5B%5D%5B.*%5D%EC%97%90%EC%84%9C%EB%8A%94%20%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다음 메시지를 로그 파일로 리디렉션하고 싶습니다.
"[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