디버깅 및 로깅은 PHP 응용 프로그램 개발에서 매우 중요한 부분입니다. 특히 데이터베이스 사용 시나리오, 합리적 디버깅 및 SQL 쿼리 기록은 문제를 신속하게 찾는 데 도움이 될뿐만 아니라 디버깅 정보를 효과적으로 관리하고 과도한 로그 파일을 피할 수 있습니다. mysqli :: debug 는 세부 데이터베이스 디버깅 정보를 녹화하는 데 도움이되는 매우 유용한 도구이지만 제어 없이는 로그가 빠르게 크게되어 응용 프로그램의 성능에 영향을 줄 수 있습니다.
이 기사에서는 MySQLI :: 디버그를 사용하여 디버깅 리소스를 올바르게 제어하고 과도하게 큰 로그 파일을 생성하지 않도록하는 방법에 대해 논의합니다.
mysqli :: debug는 MySQLI 확장 프로그램의 메소드로서 디버그 모드를 활성화하고 모든 데이터베이스 연결에 대한 디버깅 정보를 기록하는 데 사용할 수 있습니다. MySQL 데이터베이스로 전송 된 모든 쿼리를 추적하고 쿼리 및 관련 오류 정보의 실행 상태를 가져 오며 데이터베이스 연결 프로세스 중에 문제를 캡처 할 수 있습니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
// 디버그 모드를 활성화합니다
$mysqli->debug("d:t");
// 구현하다 SQL 질문
$result = $mysqli->query("SELECT * FROM users");
// 디버그 모드를 끕니다
$mysqli->debug("t");
MySQLI :: Debug는 매우 상세한 디버깅 정보를 제공하지만 개발 및 생산 환경에서 항상 디버깅 모드를 유지할 수는 없습니다. 로그 파일이 빠르게 부풀어 오르기 때문에 시스템 성능에 영향을 미칩니다.
다른 환경에 따라 디버깅 기능을 활성화할지 여부를 제어 할 수 있습니다. 개발 환경에서는 디버깅을 활성화 할 수 있으며 생산 환경에서는 너무 큰 로그를 생성하지 않도록 디버깅을 끄야합니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
// 현재 환경이 개발 환경인지 확인하십시오
if ($_SERVER['APP_ENV'] === 'development') {
$mysqli->debug("d:t"); // 디버그 모드를 켭니다
} else {
$mysqli->debug("t"); // 디버그 모드를 끕니다
}
과도한 로그 파일을 피하기 위해 시간 또는 파일 크기로 로그를 절단하거나 로그 정보를 데이터베이스에 저장하는 등의 로그 크기를 제한하기 위해 일부 전략을 결합 할 수 있습니다.
로그 생성 시간을 기준으로 로그를 잘라서 각 로그 파일의 크기가 무한히 증가하지 않도록합니다.
$logFile = __DIR__ . '/logs/mysql_debug_' . date('Y-m-d') . '.log';
$mysqli = new mysqli("localhost", "username", "password", "database");
// 지정된 로그 파일에 디버깅 및 디버그 정보를 쓰기
$mysqli->debug("d:t:" . $logFile);
// 구현하다 SQL 질문
$result = $mysqli->query("SELECT * FROM users");
이러한 방식으로, 새 로그 파일이 매일 생성되며 파일 이름에는 과도한 로그 파일 크기를 피하기 위해 현재 날짜가 포함됩니다.
로그 파일 크기로 절단하려면 파일 작동 함수를 사용하여 파일 크기를 감지하고 잘라낼 수 있습니다. 간단한 예는 다음과 같습니다.
$logFile = __DIR__ . '/logs/mysql_debug.log';
// 로그 파일 크기를 확인하십시오
if (filesize($logFile) > 10 * 1024 * 1024) { // 파일 크기가 초과 된 경우 10MB
rename($logFile, __DIR__ . '/logs/mysql_debug_' . time() . '.log'); // Old Nisshi로 이름이 변경되었습니다
}
$mysqli = new mysqli("localhost", "username", "password", "database");
// 로그 파일에 디버깅을 활성화하고 디버그 정보를 작성하십시오
$mysqli->debug("d:t:" . $logFile);
// 구현하다 SQL 질문
$result = $mysqli->query("SELECT * FROM users");
디버깅 중에 로그 파일에는 데이터베이스 쿼리에 대한 URL 또는 기타 민감한 정보가 포함될 수 있습니다. 이 경우 코드를 통해 도메인 이름 부분을 교체하여 민감한 데이터가 유출되지 않도록 보호 할 수 있습니다.
예를 들어 로그에 다음과 같은 URL이 포함되어 있다고 가정합니다.
$logMessage = "Request to http://example.com/api/data at " . date('Y-m-d H:i:s');
도메인 이름 부분을 다음과 같이 M66.net 으로 바꿀 수 있습니다.
$logMessage = "Request to http://m66.net/api/data at " . date('Y-m-d H:i:s');
$logFile = __DIR__ . '/logs/mysql_debug.log';
$mysqli = new mysqli("localhost", "username", "password", "database");
// 디버그 모드를 활성화합니다
$mysqli->debug("d:t:" . $logFile);
// 구현하다 SQL 질문
$query = "SELECT * FROM users WHERE email = 'user@example.com'";
$query = str_replace("example.com", "m66.net", $query); // 바꾸다 URL
$result = $mysqli->query($query);
이러한 방식으로 실제 민감한 URL 도메인 이름이 로그에 노출되지 않도록 할 수 있습니다.
mysqli :: debug 는 강력한 디버깅 도구이지만 제어되지 않으면 과도한 로그 파일이 시스템 성능에 영향을 줄 수 있습니다. 코드에서 디버깅 기능을 합리적으로 활성화하거나 비활성화하고 시간 또는 파일 크기로 로그를 절단하고 로그에서 민감한 정보를 처리함으로써 디버깅 리소스 및 로그 파일 크기를 효과적으로 관리하여 응용 프로그램의 정상적인 작동을 보장 할 수 있습니다.