Initial commit: 교육 프로젝트 배포
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* bbs/api_log.php
|
||||
* ─────────────────────────────────────────────────────────────────
|
||||
* 공통 로그 기록 헬퍼
|
||||
*
|
||||
* 사용법:
|
||||
* require_once __DIR__ . '/api_log.php';
|
||||
* api_log('save_learning', 'unregistered content', ['content_id' => 'F1']);
|
||||
* ─────────────────────────────────────────────────────────────────
|
||||
*/
|
||||
|
||||
define('API_LOG_FILE', __DIR__ . '/logs/api.log');
|
||||
define('API_LOG_MAX_BYTES', 512 * 1024); // 512KB 초과 시 rotate
|
||||
|
||||
/**
|
||||
* 로그 한 줄 기록
|
||||
* @param string $tag 태그 (파일명/기능명)
|
||||
* @param string $message 메시지
|
||||
* @param array $context 추가 데이터 (선택)
|
||||
*/
|
||||
function api_log(string $tag, string $message, array $context = []): void
|
||||
{
|
||||
$logDir = dirname(API_LOG_FILE);
|
||||
if (!is_dir($logDir)) {
|
||||
@mkdir($logDir, 0755, true);
|
||||
// 디렉토리 직접 접근 차단
|
||||
@file_put_contents($logDir . '/.htaccess', "Deny from all\n");
|
||||
}
|
||||
|
||||
// 512KB 초과 시 rotate (이전 로그 보존)
|
||||
if (file_exists(API_LOG_FILE) && filesize(API_LOG_FILE) > API_LOG_MAX_BYTES) {
|
||||
@rename(API_LOG_FILE, API_LOG_FILE . '.' . date('YmdHis') . '.bak');
|
||||
}
|
||||
|
||||
$ts = date('Y-m-d H:i:s');
|
||||
$ctx = empty($context) ? '' : ' ' . json_encode($context, JSON_UNESCAPED_UNICODE);
|
||||
$line = "[{$ts}] [{$tag}] {$message}{$ctx}" . PHP_EOL;
|
||||
|
||||
@file_put_contents(API_LOG_FILE, $line, FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
Reference in New Issue
Block a user