
내 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
보간합니다 . 레거시 구문에서 템플릿을 사용하려면 접두사로 .Try %property%
를 붙여야 합니다.?
$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=...
. 이는 파일에 기록된 데이터에 대한 템플릿을 제공하는 것입니다.