Files
edu/bbs/api_log.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);
}