
내 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=...
. 이는 파일에 기록된 데이터에 대한 템플릿을 제공하는 것입니다.