在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, $param2],
'line' => __LINE__,
'file' => __FILE__,
'trace' => $e->getTraceAsString()
]);
}
}
Exception
捕获异常在捕获异常时,可以通过 Exception
对象获取更多的错误信息,并将其记录到日志中。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 记录错误日志
Log::error('Error in exampleFunction: ' . $e->getMessage(), [
'params' => [$param1, $param2],
'line' => $e->getLine(),
'file' => $e->getFile(),
'trace' => $e->getTraceAsString()
]);
}
}
你可以通过自定义日志格式来记录更多的信息。例如,可以在日志中添加时间戳、请求信息等。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 自定义日志格式
$logMessage = sprintf(
"[%s] Error in %s:%d - %s\nParams: %s\nTrace: %s",
date('Y-m-d H:i:s'),
$e->getFile(),
$e->getLine(),
$e->getMessage(),
json_encode([$param1, $param2]),
$e->getTraceAsString()
);
// 记录错误日志
Log::error($logMessage);
}
}
debug_backtrace
获取调用栈信息如果你需要更详细的调用栈信息,可以使用 debug_backtrace
函数。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 获取调用栈信息
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 10);
// 记录错误日志
Log::error('Error in exampleFunction: ' . $e->getMessage(), [
'params' => [$param1, $param2],
'line' => $e->getLine(),
'file' => $e->getFile(),
'trace' => $trace
]);
}
}
Log
类的 write
方法如果你需要更灵活地控制日志的写入方式,可以使用 Log::write()
方法。
use think\facade\Log;
function exampleFunction($param1, $param2) {
try {
// 你的业务逻辑
} catch (\Exception $e) {
// 自定义日志内容
$logContent = [
'message' => $e->getMessage(),
'params' => [$param1, $param2],
'line' => $e->getLine(),
'file' => $e->getFile(),
'trace' => $e->getTraceAsString()
];
// 写入日志
Log::write(json_encode($logContent), 'error');
}
}
通过以上几种方式,你可以在ThinkPHP中优雅地打印错误日志,并包含函数参数、行号及原因。根据你的需求选择合适的方式,确保在开发和生产环境中能够快速定位和解决问题。