syslog () 는 PHP의 내장 함수로 메시지를 시스템 로그로 보냅니다. Syslog ()는 파일 로그에 직접 쓰는 것과 달리 로그를 운영 체제의 로그 파일 (예 : /var/log/syslog 또는 /var/log/messages )에 기록합니다. 이는 시스템 관리자가 로그를 중앙에서 관리하는 매우 편리한 방법입니다.
syslog () 함수의 기본 사용량은 다음과 같습니다.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$priority</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>);
</span></span>
$ 우선 순위 : 로그 메시지의 우선 순위. PHP가 지원하는 우선 순위 수준은 다음과 같습니다.
log_emerg : 시스템을 사용할 수 없습니다
log_alert : 즉각적인 조치가 필요합니다
log_crit : 임계 오류
log_err : 일반적인 오류
log_warning : 경고 메시지
log_notice : 정상이지만 중요한 이벤트
log_info : 일반 정보
log_debug : 디버그 정보
$ 메시지 : 기록 할 로그 메시지, 일반적으로 문자열 유형의 로그 메시지.
PHP에서 syslog ()를 사용하기 전에 일반적으로 로깅 세션을 초기화하려면 OpenLog () 함수를 호출해야합니다. OpenLog ()는 로그 식별자, 로그 범주 및 로그 처리 우선 순위를 지정합니다.
<span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span></span>
매개 변수 설명 :
'MyApp' : 응용 프로그램의 이름 일 수있는 로그 식별자는 다른 응용 프로그램의 로그를 구별하는 데 도움이됩니다.
log_cons : 시스템 로그를 사용할 수없는 경우 표준 오류로 출력하십시오.
log_pid : 각 로그 메시지에 프로세스 ID를 포함합니다.
log_ndelay : 로그 세션을 즉시 열고 시작하기 전에 로그 정보가 작성 될 때까지 기다리지 마십시오.
log_local1 : 로그 범주를 지정하면 로컬 로그 레벨 (예 : log_local0 to log_local7 )을 선택할 수 있습니다.
일반적으로 로깅 오류 로그는 예외 또는 오류가 잡힌 후에 수행됩니다. PHP 애플리케이션에 데이터베이스 연결 작업이 있다고 가정하면 데이터베이스 연결이 실패하면 시스템 로그에 오류를 기록해야 할 수도 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// 데이터베이스 연결 코드라고 가정하십시오</span></span><span>
</span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_ERR, </span><span><span class="hljs-string">'Database connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
}
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
위 코드에서 데이터베이스 연결이 실패하면 syslog () 함수가 오류 메시지를 시스템 로그에 기록합니다. log_err 우선 순위는 이것이 일반적인 오류임을 의미합니다.
오류 메시지를 녹화하는 것 외에도 syslog ()를 사용하여 응용 프로그램 상태, 주요 작업 등과 같은 일반적인 정보를 기록 할 수도 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_INFO, </span><span><span class="hljs-string">'Application started successfully.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-string">'User logged in with ID: 12345.'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
이 코드는 정보 수준 로그를 기록하는 방법을 보여줍니다. log_info는 일반 정보를 나타내며 Log_Notice는 주의가 필요한 일부 이벤트를 기록하는 데 사용될 수 있습니다.
syslog () 함수 자체는 사용자 정의 로그 형식을 지원하지 않습니다. 그러나 로그를 보내기 전에 메시지를 수동으로 포맷 할 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">openlog</span></span><span>(</span><span><span class="hljs-string">'myApp'</span></span><span>, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
</span><span><span class="hljs-variable">$userId</span></span><span> = </span><span><span class="hljs-number">12345</span></span><span>;
</span><span><span class="hljs-variable">$action</span></span><span> = </span><span><span class="hljs-string">'User logged in'</span></span><span>;
</span><span><span class="hljs-variable">$logMessage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'UserID: %d - Action: %s'</span></span><span>, </span><span><span class="hljs-variable">$userId</span></span><span>, </span><span><span class="hljs-variable">$action</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">syslog</span></span><span>(LOG_NOTICE, </span><span><span class="hljs-variable">$logMessage</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">closelog</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
여기서 Sprintf () 함수를 사용하여 로그 컨텐츠를 동적으로 생성하고 syslog () 로 문자열로 전달합니다.
syslog에서 기록한 정보는 일반적으로 시스템 로그 파일에 기록됩니다. 시스템 구성 파일에서 로그의 출력 위치를 지정할 수 있습니다. Linux 시스템에서 로그는 일반적으로 /var/log/syslog 또는 /var/log/메시지 에 저장됩니다.
로그를 다음과 같이 볼 수 있습니다.
<span><span><span class="hljs-built_in">tail</span></span><span> -f /var/log/syslog
</span></span>
기록되지 않은 로그 : PHP 구성 파일에서 Syslog가 활성화되어 있는지 확인하고 시스템 로그 파일의 권한을 확인하십시오.
너무 큰 로그 파일 : 장기 로깅으로 인해 로그 파일이 매우 커질 수 있습니다. 오래된 로그는 로그 회전 메커니즘을 통해 정기적으로 정리하고 보관할 수 있습니다.
로그 권한 문제 : PHP 프로세스에 시스템 로그에 정보를 작성할 수있는 충분한 권한이 있는지 확인하십시오. 권한이 충분하지 않은 경우 시스템 로그 파일의 권한을 조정해야 할 수도 있습니다.