rsyslog는 동적 로그 파일에 쓰지 않습니다.

rsyslog는 동적 로그 파일에 쓰지 않습니다.

내 Java 애플리케이션(Ubuntu 18.04)의 systemd 단위 파일이 작동하는 것 같습니다. stdout 및 stderr을 syslog로 보내도록 설정했고 로그 항목이 /var/log/syslog에 나타납니다.

하지만 동적 이름을 사용하고 싶기 때문에 다음을 포함하는 /etc/rsyslog.d/10-myapp.conf를 추가했습니다.

$CreateDirs on

:programname, startswith, "myapp-" {
  /var/log/apps/$programname.log
  stop
}

그런 다음 rsyslog를 다시 시작하고 디렉토리에 $programname.log라는 파일을 얻었습니다.

동적 파일 이름을 지정하는 방식에 문제가 있는 것 같습니다. 다른 곳에서 다음을 사용하는 사람들을 본 적이 있습니다.선택을 위한 다양한 구문변수 이름 주위에는 메시지와 %...%가 표시됩니다. 그러나 다음을 시도하고 rsyslog를 다시 시작해도 도움이 되지 않았습니다.

:programname, startswith, "myapp-" {
  "/var/log/apps/%programname%.log"
  stop
}

그러면 %programname%.log라는 파일이 생성됩니다.

답변1

동적 파일 이름을 사용하려면 템플릿을 전달해야 합니다. 이는 문자열의 이름을 지정 DynFile하고(일반적으로 예제에서) %property%사용 시 문자열에 값을 삽입합니다. 이전 구문에서 템플릿을 사용하려면 앞에 ?.Try 를 붙여야 합니다.

$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
  ?DynFile
  stop
}

레거시가 아닌 구문은 더 명확하고 때로는 더 읽기 쉽습니다. 실제로 내장된 기능을 사용하고 있습니다.옴 파일기준 치수. 알아채다,주형동적 파일 이름과 기록할 데이터 형식의 두 가지 용도가 있습니다. 그러나 간단한 문자열의 경우 동일한 방식으로 정의됩니다. 예를 들면 다음과 같습니다.

template(name="myfile" type="string"
     string="/var/log/apps/%programname%.log")

if ($programname startswith "myapp-") then {
     action(type="omfile" dynaFile="myfile")
     stop
}

이러한 키워드는 dynaFile철자를 정확하게 입력해야 합니다. 키워드 옵션 이 action()있습니다 template=.... 이는 파일에 기록된 데이터에 대한 템플릿을 제공하는 것입니다.

관련 정보