다음 rsyslog 구성 파일을 사용하여 프로그램 로그를 특정 파일로 리디렉션합니다.
# Name of the program
set $.program_name = "myapp";
# Path to the log file
set $.logfile_path = "/var/log/myapp.log";
# Templates
$template log_file, "%$.logfile_path%"
$template datetime_message, "[%timestamp:::date-year%-%timestamp:::date-month%-%timestamp:::date-day%_%timestamp:::date-hour%_%timestamp:::date-minute%_%timestamp:::date-second%.%timestamp:0:3:date-subseconds%]%msg%\n"
# Program log redirection
if( ($programname == $.program_name)) then
{
?log_file;datetime_message
}
사용 가능한 저장 공간이 많지 않고, 프로그램에서 로그가 많이 생성되기 때문에 logrotate를 사용하여 주기적으로 파일을 회전시켜 압축한 후 저장 용량이 큰 서버로 전송하므로 마운트된 파티션은 결코 포화 되지 /var
않습니다.
/var/log/messages
로그가 파일로 리디렉션되더라도 로그가 , /var/log/syslog
및 로 전송된다는 사실을 깨닫기 전까지는 잘 작동했습니다 /var/log/user.log
.
결과적으로 로그는 4개의 다른 파일에 복사되었으며 그 중 3개는 정기적으로 순환되지 않아 파티션이 매우 빠르게 포화되었습니다.
로그를 보내는 방법을 검색했지만 /var/log/myapp.log
아무것도 찾지 못했습니다. 또한 수정을 피하고 /etc/rsyslog.conf
에 있는 특정 rsyslog 구성 파일만 수정하고 싶습니다 /etc/rsyslog.d/99-myapp.conf
.
myapp
모든 로그가 다른 파일 로만 전송되어야 /var/log/myapp.log
하고 다른 파일로는 전송되지 않아야 함 을 syslog에 어떻게 알릴 수 있습니까 ?
답변1
메시지를 선택하고 이에 대한 작업을 제공한 후 stop
다음 작업을 추가하여 메시지의 추가 처리를 중지할 수 있습니다.
if( ($programname == $.program_name)) then
{
?log_file;datetime_message
stop
}
기본 구성 파일에 포함된 경우
$IncludeConfig /etc/rsyslog.d/*.conf
파일에서 이 작업을 수행할 수 있습니다 (예:앞으로정상적인 상황에서의 기타 작업. "폐기"라는 단어를 찾으세요문서.