Laravel中如何用单一函数同时输出日志到文件与Artisan控制台?
解决Laravel日志同时写入文件和控制台的单一函数方案
嘿,这个需求太常见了!Laravel其实有几种简洁的方式帮你实现,不用再重复写Log::warning()和dump()啦,我给你梳理两个最实用的方法:
方法一:自定义日志通道(官方推荐)
Laravel的日志系统基于Monolog,咱们可以配置一个同时输出到文件和控制台的日志通道,之后只用调用这个通道的日志方法就行。
步骤1:修改日志配置文件
打开config/logging.php,在channels数组里新增一个通道,比如叫file_and_console:
'file_and_console' => [ 'driver' => 'stack', 'channels' => ['single', 'stderr'], 'ignore_exceptions' => false, ],
这里stack驱动会把日志同时转发给single(默认的文件日志通道)和stderr(控制台输出通道)。
步骤2:使用自定义通道
之后你就可以用这个通道来记录日志,一次调用同时输出到文件和控制台:
Log::channel('file_and_console')->warning("some message");
进阶:设为默认通道
如果你希望所有日志都默认走这个通道,直接把config/logging.php里的default值改成file_and_console就行:
'default' => env('LOG_CHANNEL', 'file_and_console'),
这样直接调用Log::warning("some message")就自动同时输出到文件和控制台啦!
方法二:自定义辅助函数
要是你就想要一个专属的小函数(比如logAndDump()),咱们可以自己写一个辅助函数:
步骤1:创建辅助函数文件
在项目根目录的app文件夹下新建helpers.php文件,写入以下内容:
<?php if (!function_exists('logAndDump')) { function logAndDump($message, $level = 'warning') { // 写入日志文件 \Illuminate\Support\Facades\Log::$level($message); // 输出到Artisan控制台 dump($message); } }
步骤2:自动加载辅助函数
打开composer.json,在autoload数组里添加这个文件的路径:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/helpers.php" ] },
然后执行composer dump-autoload让配置生效。
步骤3:使用自定义函数
现在你就可以在代码里直接调用这个函数了:
logAndDump("some message"); // 或者指定日志级别 logAndDump("some error message", 'error');
这两种方法都能帮你避免重复代码,看你更习惯哪种方式啦~
内容的提问来源于stack exchange,提问作者Sergio Barbosa
相关产品推荐
相关产品推荐

