syslog 메시지를 /var/log/messages 및 /var/log/syslog에 복사하지 마세요.

syslog 메시지를 /var/log/messages 및 /var/log/syslog에 복사하지 마세요.

다음 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파일에서 이 작업을 수행할 수 있습니다 (예:앞으로정상적인 상황에서의 기타 작업. "폐기"라는 단어를 찾으세요문서.

관련 정보