Laravel 日志、调试、输出、授权等技巧总结

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们可以使用 Log::info(),或使用更短的 info() 额外参数信息,来了解更多发生的事情

日志记录参数


我们可以使用 Log::info(),或使用更短的 info() 额外参数信息,来了解更多发生的事情


Log::info('User failed to login.', ['id' => $user->id]);


更方便的 DD


我们可以在 Eloquent 句子或者任何集合结尾添加 ->dd(),而不是使用 dd($result)。


// 以前
$users = User::where('name', '小明')->get();
dd($users);
// 现在
$users = User::where('name', '小明')->get()->dd();


使用 context 日志


在最新的 Laravel 8.49 中:Log::withContext() 将帮助我们区分不同请求之间的日志消息。


如果我们创建了中间件并且设置了 context,所有的长消息将包含在 context 中,我们搜索会更容易。


举例:


public function handle(Request $request, Closure $next)
{
    $requestId = (string) Str::uuid();
    Log::withContext(['request-id' => $requestId]);
    $response = $next($request);
    $response->header('request-id', $requestId);
    return $response;
}


API 资源:带不带 “data”?


如果我们使用 Eloquent API 去返回数据,它们将自动封装到 data 中。


如果要将其删除,需要在app/Providers/AppServiceProvider.php 中添加 JsonResource::withoutWrapping();


class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        JsonResource::withoutWrapping();
    }
}


API 返回一切正常


如果我们有 API 端口执行某些操作但是没有响应,我们只想返回 “一切正常”: 我们可以返回 204 状态代码 “No content”。

在 Laravel 中,这就很简单: return response()->noContent();.


public function reorder(Request $request)
{
    foreach ($request->input('rows', []) as $row) {
        Country::find($row['id'])->update(['position' => $row['position']]);
    }
    return response()->noContent();
}


一次检查多个权限


除了 @can Blade 指令外,还可以用 @canany 指令一次检查多个权限:


@canany(['update', 'view', 'delete'], $articles)
    // 当前用户可以修改,查看,或者删除文章
@elsecanany(['create'], \App\Article::class)
    // 当前用户可以创建文章
@endcanany


更多关于用户注册的事件


希望在新用户注册后执行一些操作怎么优雅的实现呢? 我们可以转到 app/Providers/EventServiceProvider.php 和 添加更多的监听类, 然后在 $event->user 对象中实现 handle() 方法。


class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
            // 我们可以在这里添加任何Listener类
            // 在该类中使用handle()方法
        ],
    ];


Auth::once () 的使用


使用方法 Auth::once(),可以用用户登录一个请求。 Auth::once () 不会使用任何会话或 cookie,这意味着该方法在构建无状态 API 时可能很有帮助。


if (Auth::once($credentials)) {
    //
}


更改用户密码更新的 API 令牌


当用户的密码更改时,可以方便地更改用户的 API 令牌。这个实现非常重要

模型:


public function setPasswordAttribute($value)
{
    $this->attributes['password'] = $value;
    $this->attributes['api_token'] = Str::random(100);
}


覆盖超级管理员的权限


如果你已经定义了网关(Gates)但是又想要覆盖超级管理员的所有权限。


给超级管理员所有权限,我们可以在 AuthServiceProvider.php 文件中用 Gate::before() 语句拦截网关(Gates)。


// 拦截任何一个网关,检查它是否是超级管理员
Gate::before(function($user, $ability) {
    if ($user->is_super_admin == 1) {
        return true;
    }
});
// 或者你使用一些权限包
Gate::before(function($user, $ability) {
    if ($user->hasPermission('root')) {
        return true;
    }
});


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
10月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
267 0
|
7月前
|
消息中间件 存储 Java
手动实现 Spring Boot 日志链路追踪:提升调试效率的利器
【8月更文挑战第8天】在复杂的分布式系统中,日志是诊断问题、追踪系统行为的重要工具。然而,随着微服务架构的普及,服务间的调用链路错综复杂,传统的日志记录方式往往难以快速定位问题源头。今天,我们将探讨如何在不依赖外部组件(如Zipkin、Sleuth等)的情况下,手动实现Spring Boot应用的日志链路追踪,让日志定位更加便捷高效。
237 1
|
3月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
98 5
|
4月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
96 8
|
5月前
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
55 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
7月前
|
XML Java 数据库
"揭秘!Spring Boot日志链路追踪大法,让你的调试之路畅通无阻,效率飙升,问题无所遁形!"
【8月更文挑战第11天】在微服务架构中,请求可能跨越多个服务与组件,传统日志记录难以全局追踪问题。本文以电商系统为例,介绍如何手动实现Spring Boot应用的日志链路追踪。通过为每个请求生成唯一追踪ID并贯穿全链路,在服务间传递该ID,并在日志中记录,即使日志分散也能通过ID串联。提供了实现这一机制所需的关键代码片段,包括使用过滤器设置追踪ID、业务代码中的日志记录及Logback配置。此方案显著提升了问题定位的效率,适用于基于Spring Boot构建的微服务环境。
182 4
|
7月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
73 0
|
7月前
|
存储 JSON 监控
FastAPI日志之谜:如何揭开Web应用监控与调试的面纱?
【8月更文挑战第31天】在现代Web开发中,日志记录对于监控应用状态、诊断问题和了解用户行为至关重要。FastAPI框架提供了强大的日志功能,使开发者能轻松集成日志记录。本文将详细介绍如何在FastAPI中设置和利用日志,包括基础配置、请求响应日志、错误处理和结构化日志等内容,帮助提升应用的可维护性和性能。
263 0
|
9月前
|
C++
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
483 6
|
9月前
|
SQL 运维 关系型数据库