현재 위치: > 최신 기사 목록> Syslog 함수 호출을 사용하여 서버 레벨 오류 로그를 기록하는 방법은 무엇입니까?

Syslog 함수 호출을 사용하여 서버 레벨 오류 로그를 기록하는 방법은 무엇입니까?

gitbox 2025-06-23

1. syslog () 함수 소개

syslog () 는 PHP의 내장 함수로 메시지를 시스템 로그로 보냅니다. Syslog ()는 파일 로그에 직접 쓰는 것과 달리 로그를 운영 체제의 로그 파일 (예 : /var/log/syslog 또는 /var/log/messages )에 기록합니다. 이는 시스템 관리자가 로그를 중앙에서 관리하는 매우 편리한 방법입니다.

2. syslog () 함수 사용의 기본 구문

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 : 디버그 정보

  • $ 메시지 : 기록 할 로그 메시지, 일반적으로 문자열 유형의 로그 메시지.

3. syslog를 구성하십시오

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 )을 선택할 수 있습니다.

4. 로그 오류 로그

일반적으로 로깅 오류 로그는 예외 또는 오류가 잡힌 후에 수행됩니다. PHP 애플리케이션에 데이터베이스 연결 작업이 있다고 가정하면 데이터베이스 연결이 실패하면 시스템 로그에 오류를 기록해야 할 수도 있습니다.

 <span><span><span class="hljs-meta">&lt;?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>-&gt;</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">?&gt;</span></span><span>
</span></span>

위 코드에서 데이터베이스 연결이 실패하면 syslog () 함수가 오류 메시지를 시스템 로그에 기록합니다. log_err 우선 순위는 이것이 일반적인 오류임을 의미합니다.

5. 로그 사용자 정의 로그

오류 메시지를 녹화하는 것 외에도 syslog ()를 사용하여 응용 프로그램 상태, 주요 작업 등과 같은 일반적인 정보를 기록 할 수도 있습니다.

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

이 코드는 정보 수준 로그를 기록하는 방법을 보여줍니다. log_info는 일반 정보를 나타내며 Log_Notice는 주의가 필요한 일부 이벤트를 기록하는 데 사용될 수 있습니다.

6. 고급 사용 : 사용자 정의 로그 형식

syslog () 함수 자체는 사용자 정의 로그 형식을 지원하지 않습니다. 그러나 로그를 보내기 전에 메시지를 수동으로 포맷 할 수 있습니다.

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

여기서 Sprintf () 함수를 사용하여 로그 컨텐츠를 동적으로 생성하고 syslog () 로 문자열로 전달합니다.

7. 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>

8. FAQ 및 솔루션

  • 기록되지 않은 로그 : PHP 구성 파일에서 Syslog가 활성화되어 있는지 확인하고 시스템 로그 파일의 권한을 확인하십시오.

  • 너무 큰 로그 파일 : 장기 로깅으로 인해 로그 파일이 매우 커질 수 있습니다. 오래된 로그는 로그 회전 메커니즘을 통해 정기적으로 정리하고 보관할 수 있습니다.

  • 로그 권한 문제 : PHP 프로세스에 시스템 로그에 정보를 작성할 수있는 충분한 권한이 있는지 확인하십시오. 권한이 충분하지 않은 경우 시스템 로그 파일의 권한을 조정해야 할 수도 있습니다.