
5分钟快速上手psr/logcomposer安装与LoggerInterface入门教程【免费下载链接】log项目地址: https://gitcode.com/gh_mirrors/lo/logpsr/log 是 PHP 生态中最核心的日志接口标准包它实现了 PSR-3 规范定义了LoggerInterface接口和 8 个标准日志级别。无论你的项目用多快多好的日志库只要依赖 psr/log就能轻松切换日志实现而不用改一行业务代码。本文带你用 5 分钟完成 composer 安装并入门LoggerInterface的实际用法。什么是 psr/log为什么每个 PHP 项目都该装它简单来说psr/log本身不是一个日志器而是一份日志器长什么样的契约接口。它只描述一个 logger 应该具备哪些能力定义了 LoggerInterface包含debug、info、error等 9 个标准方法提供了 LogLevel 常量类统一管理 8 个日志级别附带 LoggerTrait、AbstractLogger 等脚手架帮你省掉大量重复代码打个比方psr/log 是插座标准各种日志库是电器。只要电器符合标准换任何一家产品都能插上就用。包的基本信息名称psr/log、MIT 协议、要求 PHP ≥ 8.0都记录在 composer.json 中。一键安装步骤composer require psr/log安装只需一条命令在任意 PHP 项目根目录下执行composer require psr/log如果没有使用 composer 管理的项目也可以先克隆本仓库体验源码git clone https://gitcode.com/gh_mirrors/lo/log安装完成后包会通过 PSR-4 自动加载命名空间Psr\Log\对应 src/ 目录无需任何额外配置。环境要求清单项目要求PHP 版本≥ 8.0见 composer.json依赖包无纯接口包零依赖协议MIT认识 LoggerInterface8 个日志级别速览LoggerInterface 一共定义了 9 个方法8 个按级别划分的方法 1 个任意级别的log()通用方法。8 个级别从高到低排列如下级别常量典型场景emergencyLogLevel::EMERGENCY系统不可用网站整体宕机alertLogLevel::ALERT需要立即处理如数据库不可用criticalLogLevel::CRITICAL应用组件失效、未预期的异常errorLogLevel::ERROR运行时错误需记录并监控warningLogLevel::WARNING使用了已废弃的 API 等noticeLogLevel::NOTICE正常但值得关注的事件infoLogLevel::INFO用户登录、关键业务动作debugLogLevel::DEBUG详细的调试信息所有级别常量集中定义在 LogLevel 中级别名与官方 PSR-3 规范完全一致这也是所有 PHP 日志库通用的语言。最快上手方法在你的类中注入一个 Logger实际使用时最常见的姿势是依赖注入——类的构造函数接收一个LoggerInterface运行时再决定用哪个具体日志库。官方示例见 README.mdpublic function __construct(LoggerInterface $logger null) { $this-logger $logger; }之后在业务代码里随手记录即可$this-logger-info(Doing work); $this-logger-error(Oh no!, [exception $exception]); 小贴士消息支持{foo}形式的占位符会被第二个参数context 数组中对应的键值替换异常对象要放在名为exception的键下这是规范约定的唯一硬规则。进阶技巧NullLogger 与 LoggerAwareTrait用 NullLogger 告别 if 判断当你的库允许不提供日志器时直接塞一个 NullLogger 即可——它继承自AbstractLogger所有方法都是空操作。这样代码里就不用到处写if ($this-logger)了。用 LoggerAwareTrait 一行接入日志LoggerAwareInterface 定义了setLogger()方法而 LoggerAwareTrait 直接提供了现成实现use LoggerAwareTrait;一个use让你的类瞬间获得接受外部日志器的能力特别适合那些已经继承了别的类、无法再继承AbstractLogger的场景。源码目录导航5 个文件看懂整个包psr/log 的全部源码都在 src/ 目录下结构非常精简src/LoggerInterface.php —— 核心接口本文主角src/LogLevel.php —— 8 个级别常量src/LoggerTrait.php —— 把 8 个级别方法委托给log()的 Traitsrc/AbstractLogger.php —— 只继承了LoggerTrait的抽象基类自己实现log()即可src/LoggerAwareTrait.php / src/LoggerAwareInterface.php —— 能接收日志器的能力src/InvalidArgumentException.php —— 非法级别名时抛出的异常src/NullLogger.php —— 什么都不做的空日志器常见问题 FAQQ装了 psr/log 就能打日志了吗不能。它只是接口不提供输出能力。你需要再搭配一个实现了LoggerInterface的具体日志库如 Monologpsr/log 的价值在于让业务代码与具体日志库解耦。Q自定义日志级别会报错吗会。log()方法要求级别必须是LogLevel中定义的 8 个值之一否则抛出 InvalidArgumentException。Q写日志库时需要继承 AbstractLogger 吗如果你实现的日志器对所有级别处理逻辑一致继承 AbstractLogger 只需写一个log()方法其余 8 个方法自动就位——这是官方推荐的懒人写法。 恭喜你现在已经掌握了 psr/log 的安装与核心用法。下一步建议在你的项目中引入一个实现了LoggerInterface的日志库把NullLogger换成真家伙体验统一的 PSR-3 日志接口带来的便利。【免费下载链接】log项目地址: https://gitcode.com/gh_mirrors/lo/log创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考