在ThinkPHP中,优雅地打印错误日志并包含函数参数、行号及原因,可以通过以下几种方式实现:
Log
类记录日志ThinkPHP 提供了 Log
类来记录日志。你可以通过 Log::error()
方法来记录错误日志,并在日志中包含函数参数、行号及原因。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 记录错误日志
Log::error('Error in exampleFunction: ' . $e->getMessage(), [
'params' => ['param1' => $param1, 'param2' => $param2],
'line' => __LINE__,
'file' => __FILE__,
'trace' => $e->getTraceAsString()
]);
}
}
Exception
类捕获异常你可以在捕获异常时,将异常信息、函数参数、行号等信息记录到日志中。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 记录错误日志
Log::error(sprintf(
"Error in %s on line %d: %s\nParams: %s\nTrace: %s",
__FILE__,
__LINE__,
$e->getMessage(),
json_encode(['param1' => $param1, 'param2' => $param2]),
$e->getTraceAsString()
));
}
}
debug_backtrace
获取调用栈信息如果你想在日志中包含调用栈信息,可以使用 debug_backtrace
函数。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 获取调用栈信息
$trace = debug_backtrace();
$traceInfo = array_map(function($trace) {
return sprintf(
"File: %s, Line: %d, Function: %s",
$trace['file'] ?? '',
$trace['line'] ?? '',
$trace['function'] ?? ''
);
}, $trace);
// 记录错误日志
Log::error(sprintf(
"Error in %s on line %d: %s\nParams: %s\nTrace: %s",
__FILE__,
__LINE__,
$e->getMessage(),
json_encode(['param1' => $param1, 'param2' => $param2]),
implode("\n", $traceInfo)
));
}
}
Log
类的 write
方法你也可以直接使用 Log::write()
方法,手动记录日志。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 记录错误日志
Log::write(sprintf(
"Error in %s on line %d: %s\nParams: %s\nTrace: %s",
__FILE__,
__LINE__,
$e->getMessage(),
json_encode(['param1' => $param1, 'param2' => $param2]),
$e->getTraceAsString()
), 'error');
}
}
你还可以通过配置日志格式,使日志输出更加规范。在 config/log.php
中配置日志格式:
return [
// 日志记录方式
'type' => 'File',
// 日志保存目录
'path' => '',
// 日志记录级别
'level' => [],
// 单文件日志写入
'single' => false,
// 独立日志级别
'apart_level' => [],
// 最大日志文件数量
'max_files' => 0,
// 是否关闭日志写入
'close' => false,
// 日志输出格式化
'format' => '[%s][%s] %s', // 自定义日志格式
];
通过以上方法,你可以在ThinkPHP中优雅地打印错误日志,并包含函数参数、行号及原因。根据实际需求选择合适的方式,确保日志信息完整且易于排查问题。