IDEA激活码 (2021-05-05)

简单的语法,强大的引擎——laravel日志入门

日志的作用是记录系统运行轨迹, 方便调试和归档、分析。laravel中使用monolog作为日志引擎(https://github.com/Seldaek/monolog)。

laravel项目中和日志相关的配置包括两个部分

logging配置文件理解

laravel中config目录下的所有配置文件都是返回一个数组,logging.php也是。logging配置文件中的数据包含两个索引,一个是default 指定默认的日志通道,另一个是channels,定义了所有可用的通道。

什么是通道(channel)

通道定义了日志输出的目标、路径、最低级别等信息,或者理解为一个通道代表一种日志形式。使用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) 

定义通道的时候必须配置一个驱动(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

一个调用指定工厂创建通道的驱动程序

通过customermonolog驱动可以实现自定义日志逻辑的功能,比如可以自己实现一个将日志发送到邮箱的通道,此通道通过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()来通过制定通道记录日志