42 lines
1.6 KiB
PHP
42 lines
1.6 KiB
PHP
<?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);
|
|
}
|