日志的作用是记录系统运行轨迹, 方便调试和归档、分析。laravel中使用monolog作为日志引擎(https://github.com/Seldaek/monolog)。
laravel项目中和日志相关的配置包括两个部分
laravel中config目录下的所有配置文件都是返回一个数组,logging.php也是。logging配置文件中的数据包含两个索引,一个是default 指定默认的日志通道,另一个是channels,定义了所有可用的通道。
通道定义了日志输出的目标、路径、最低级别等信息,或者理解为一个通道代表一种日志形式。使用Log::info()输出日志的时候laravel会使用env中LOG_CHANNEL配置的通道来记录日志(默认是stack通道)。logging.php文件中的channels配置项中预定义了10个通道,stack、single、daily、slack、papertrail、stderr、syslog、errorlog、null、emergency。每个通道指定了不同的日志目标和具体详细配置。比如single通道描述了使用单一文件记录日志的规则,并且指定了日志文件的路径;daily通道定义了每天生成一个文件的形式记录日志,并且定义了日志文件的路径。
通道可以自定义,比如在chanels数组中可以追加一个专门用来记录短信日志的通道如下:
'sms'=>[
'driver'=>'daily',
'path'=>storage_path('logs/sms.log'),
'level'=>'debug',
'days'=>365,
],
这个通道配置含义为:使用daily驱动来实现日志记录的操作,每天生成一个日志文件,文件的路径为/logs目录下的sms文件,日志保存365天,最低日志级别为debug。定义完通道之后可以使用Log::channel('sms')方法来实例化此通道专门的Log实例。调用此实例的日志方法即可将日志记录到指定文件,比如Log::channel('sms')->info('短信发送日志测试')
需要介绍的预定义通道如下
stack |
使用channels属性配置多个通道,将挨个调用这些通道的驱动记录日志,比如stack中配置了两个通道,一个是daily一个是single,则一个日志语句将同时记录到两个日志文件中。相当于每个通道都执行一遍。 比如你又想将日志记录到文件中,还想将日志通过slack即时通知给自己,则可以先定义两个通道,然后在stack的channels属性中包含这两个通道,那么你的一条记录日志的代码可以实现同时记录文件并且通过slack通知的效果。 |
single |
将日志信息记录到一个文件中 |
daily |
将日志信息按照天分割记录到文件中 |
slac |
将日志通过slack服务(一个第三方的即使通讯服务提供商)通知给目标接受者,当然通道中需要配置host等信息。 |
papertrail |
将日志通过papertrail服务输出 |
定义通道的时候必须配置一个驱动(driver),驱动是具体实现记录日志的处理器,有以下驱动。定义通道的时候可以直接调用他们来完成自己通道的逻辑。比如想定义一个名字为a的通道,配置其driver为daily,然后就可以调用此通道来记录日志了,此通道则按照每天分割日志文件。
laravel支持以下驱动:
stack |
一个便于创建『多通道』通道的包装器 |
single |
单个文件或者基于日志通道的路径 (StreamHandler) |
daily |
一个每天轮换的基于 Monolog 驱动的 RotatingFileHandler |
slack |
一个基于 Monolog 驱动的 SlackWebhookHandler |
papertrail |
一个基于 Monolog 驱动的 SyslogUdpHandler |
syslog |
一个基于 Monolog 驱动的 SyslogHandler |
errorlog |
一个基于 Monolog 驱动的 ErrorLogHandler |
monolog |
一个可以使用任何支持 Monolog 处理程序的 Monolog 工厂驱动程序 |
custom |
一个调用指定工厂创建通道的驱动程序 |
通过customer和monolog驱动可以实现自定义日志逻辑的功能,比如可以自己实现一个将日志发送到邮箱的通道,此通道通过custom驱动来调用自己实现的发送邮箱逻辑。然后通过统一的facade语法Log::channel('通道名')->info()就可以将内容发送到指定的邮箱了。这个内容我们下节再讲。
laravel中通过log门面来实现日志输出,无论使用任何通道,无论使用任何驱动,无论实现任何效果的日志行为,都是通过以下几个门面方法来完成日志记录的工作。
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Log::info()调用默认通道来实现日志记录
Log::channel('channelName')::info()来通过制定通道记录日志
热门评论