在ThinkPHP中,优雅地打印错误日志可以帮助开发者快速定位和解决问题。你可以通过以下步骤来实现包含参数、行号和原因的日志记录:
Log
类记录日志ThinkPHP 提供了 Log
类来记录日志。你可以在需要记录日志的地方调用 Log::record()
或 Log::write()
方法。
你可以使用 debug_backtrace()
函数来获取当前调用栈的信息,包括文件名、行号等。
在记录日志时,可以将相关参数一并记录下来,方便排查问题。
以下是一个示例代码,展示了如何优雅地记录错误日志:
use think\facade\Log;
function logError($message, $params = []) {
// 获取调用栈信息
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$file = $backtrace[0]['file'] ?? 'unknown';
$line = $backtrace[0]['line'] ?? 0;
// 构造日志信息
$logMessage = sprintf(
"Error in %s on line %d: %s\nParams: %s",
$file,
$line,
$message,
json_encode($params, JSON_PRETTY_PRINT)
);
// 记录日志
Log::record($logMessage, 'error');
}
// 示例调用
try {
// 你的业务逻辑
$params = ['param1' => 'value1', 'param2' => 'value2'];
// 假设这里发生了错误
throw new Exception("Something went wrong");
} catch (Exception $e) {
logError($e->getMessage(), $params);
}
日志会被记录到 runtime/log
目录下的日志文件中,文件名通常是 YYYY-MM-DD.log
。日志内容会包含错误信息、文件名、行号以及参数。
Log::record()
的第二个参数是日志级别,常用的级别有 error
、info
、debug
等。你可以根据需要选择合适的日志级别。
你可以在 config/log.php
中配置日志的行为,例如日志的存储方式、日志文件的命名规则等。
如果你希望日志格式更加统一,可以在 logError
函数中对日志信息进行进一步格式化,例如添加时间戳、请求ID等。
如果你需要更强大的日志功能,可以考虑使用 Monolog 库。ThinkPHP 也支持集成 Monolog,你可以在 config/log.php
中配置 Monolog 作为日志驱动。
通过以上方法,你可以在 ThinkPHP 中优雅地记录错误日志,包含参数、行号和原因,从而更高效地排查和解决问题。