2013-09-02 4 views
3

우리는 perls 스크립트에서 local2의 기능 코드를 사용하여 많은 syslog 메시지를 전송합니다. 이것은 Red Hat에서 정말 잘 작동하지만 SunOS에서는 메시지가 local2로 보이지 않습니다. 예를 들어, 최소 스크립트는 다음과 같습니다.perl에서 syslog 메시지 보내기

#!/usr/bin/perl 

use strict; 
use warnings; 

use Sys::Syslog qw(:DEFAULT :standard :macros); 
openlog("", 'ndelay', 'local2'); 
syslog('info', "ItWorks"); 
`logger -p local2.info "ItWorks"`; 

이 스크립트에서 Syslog perl 모듈과 logger 명령을 통해 로그를 보내고 있습니다. 두 번째 메시지 만 local2로 이동합니다. 내가 local2에 가지 않는다고 믿는 이유는 syslog.conf 파일에 local2를 전달하기위한 규칙 설정이 있고 두 번째 메시지 만 전달된다는 것입니다. 나는 그들이 약간 다를 로그 파일에서이 메시지를 볼 때 그 중요한 경우, 잘 모르겠어요

Sep 2 11:41:22 ssapp7001v <150>Sep 2 11:41:22 d336599: ItWorks 
Sep 2 11:41:22 ssapp7001v d336599: [ID 702911 local2.info] ItWorks 

나는 또한 내가으로 LOCAL2를 사용하는 펄 코드에서 다양한 조합을 시도 것을 추가해야 문자열을 상수로 사용하여 openlog 호출 및/또는 syslog 호출에서 지정합니다. 그 중 어떤 것도 차이를 만들어 내지 못합니다. 나는 단지 backticks를 사용하고 logger를 호출 할 수는 있지만 그것은 최후의 수단이다. 왜냐하면 나는 명령 행에 친숙하지 않을 수도있는 문자와 모든 로그 메시지에 대한 새로운 프로세스를 여는 성능에 치중해야하기 때문이다. 불행하게도이 서버에서 설정을 변경하는 것은 문제가되지 않습니다.

답변

3

Perl syslog 모듈에 SunOS에 몇 가지 문제가있는 것 같습니다. 이 문제는 해결되었을 수도 있지만이 서버는 회사의 다른 부서에서 소유하므로 업데이트가 옵션이 아닙니다. 내가 한 일은 로거 커맨드 라인 유틸리티를 사용하는 것이 었습니다. 이것은 이상과는 거리가 멀지 만 효과가 있습니다. 여기서 코드는 각 호출에 대한 로거를 닫지 만 쉽게 열어 둘 수 있습니다. 계속 열어 두는 것의 문제점은 심각도를 변경할 수 없다는 것입니다.

open(my $fh, "| logger -p $facility.$severityName"); 
print $fh $logmsg . "\n"; 
close($fh); 

다른 옵션은 시스템 로그 API 호출 될 것이다 그러나 나는이 이상 조금이야 그냥

:-)이 단계에서 작동하는 뭔가가 필요