laravel的日志使用说明

了解系统的默认支持

Laravel 日志基于「 通道 」和 「 驱动 」的。那么这个通道是干嘛的?驱动又是干嘛的?

通道 :
1.它表示了某种日志格式化的方式(或可理解为某个模块的日志)。
2.它配置了日志的输出方式,例如单个文件、每日一个文件、发送请求到日志服务器等。
3.它的配置可能支持锁、文件权限等,这要看这个通道是否提供支持。

驱动 :
确定日志消息的实际记录方式和位置(或理解为输出或写入内容的工具类)。

日志输出过程的流程图

上面流程图很重要,注意通道可以配置一个,也可以配置多个,也就是说支持配置日志同时写入多个通道进行输出。下面是默认的logging.php配置内容的一些注释。

'default' => env('LOG_CHANNEL', 'stack'),	//这里表示Log门面默认使用stack通道作为日志驱动,这是一个可以创建『多通道』通道的包装器。
'channels' => [		//channels数组:是laravel系统所有支持的“通道”都配置在这里						
	/** 下面着重说明一下stack:
		stack下又有一个channels配置,这里就是为什么我上面的流程图中表示的“它可以实现将日志同时输出到多处”,如记录在本地laravel-[date].log中,并同时发送至日志服务器: 127.0.0.1:8080/xxx(下面“多个通道时它们的关系”会提到),下面显示系统默认的配置并解释:
	 */
        'stack' => [
            'driver' => 'stack',		// 使用“stack驱动”,这与父级的“stack通道”是不同的
            'channels' => ['single'],	// 默认的配置文件使用了单个文件输出
            'ignore_exceptions' => false,	//默认不忽略异常
        ],
	
	...        
]

# 官方解释 ignore_exceptions=>true 时忽略每个子处理程序引发的异常。例如这允许您忽略远程tcp连接可能已断开但不希望整个应用程序崩溃的问题,并且可能希望继续登录到其他处理程序。

多个通道时它们的关系

官方给了两个很重要也很典型的日志驱动方式singledaily。如果没有合理配置的话,可能不能达到你期望的效果;并且多个配置之间存在会相互影响,所以要小心配置。

多个通道一起使用时,要了解每个通道的每个配置项,尤其是能相互影响的配置项。

名称描述默认值
bubble【重要】表示是否在处理后将消息传递到其他频道true
locking在写入日志文件之前尝试锁定日志文件false
permission日志文件的权限0644

配置示例:

'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
	'stack' => [
		'driver' => 'stack',
	    'channels' => ['daily', 'slack'],		// 这里配置了2个通道,它们是顺序的
	    'ignore_exceptions' => false,
	],
	'daily' => [
		'driver' => 'daily',        // 按天生成日志文件
		'bubble' => false,        // 默认为 false , 当设置为true时表示不在传递到其他通道
		'path' => storage_path('logs/laravel.log'),
		'level' => env('LOG_LEVEL', 'debug'),	// 什么级别的日志记录在文件中?
		'days' => 14,
	],
	'slack' => [
        'driver' => 'slack',		// 将日志发送到Slack服务
        'url' => env('LOG_SLACK_WEBHOOK_URL'),	// 某服务地址
        'username' => 'Laravel Log',
        'emoji' => ':boom:',
        'level' => env('LOG_LEVEL', 'debug'), 				//默认critical,注意自己允许的日志级别
    ],
]

上面示例中,使用 stack 作为默认的通道(因为Log门面默认只能设置一种通道),而这里又给 stack 配置了2个通道,这样就实现了日志既能保存在本地文件laravel-[date].log中,又能将日志请求至URL(slack的配置);其中当设置bubble => true表示不再传递到其它通道,所以当为stack配置多个通道时要注意使用默认值或false。还有每个通道都应设置level允许的日志级别,默认slack.level是允许critical级别,它不会发送debuginfo等日志到Slack服务

如何使用

Laravel框架提供了八个级别的日志方法和info()logger()两个辅助函数,使用时也可以指定单个或多个通道Log::channel("sms-log")->info($txt),这里不多说了,可以看官方文档。

# 这里还有2个.env的配置会影响日志,做个说明
APP_ENV=production			# 这里会显示在日志内容中
LOG_LEVEL=debug				# 这里在配置什么级别的日志写入某通道时很关键

自定义一个短信日志(通道)示例:

channels => [
	...
	'sms-xxx' => [			//定义xxx短信日志
            'driver' => 'daily',        			 // 采用按天生成日志文件的驱动
            'path' => storage_path('logs/sms-xxx.log'), 		// 这样会生产 sms-log-2024-01-01.log 文件名格式的日志
           	 'days' => 0,  		//注释掉,看源码未配置时默认是7天,想实现永久设置为0
        ],
    ...
]

// 使用时调用写入指定sms-xxx通道:
Log::channel("sms-log")->info($txt); 	// 每个通道都可以使用这个8个级别的日志类型。这样指定的方式可以实现某个模块想单独记录一个日志文件的场景

驱动

上面‘如何使用’章节,定义的sms-xxx通道使用了每日一个日志文件的daily驱动。看到此配置更有利于理解通道与驱动的关系。

系统默认支持一些驱动,这个可以看官方文档。

使用monolog支持的保存日志至Elasticsearch

 'elasticsearch' => [
            'driver' => 'monolog',
            'handler' => Monolog\Handler\ElasticsearchHandler::class,
            'formatter' => Monolog\Formatter\ElasticsearchFormatter::class,
            'handler_with' => [
                'host' => env('ELASTICSEARCH_HOST', 'localhost:9200'), // Elasticsearch 服务器地址
                'index' => 'laravel_logs', // Elasticsearch 索引名
            ],
            'formatter_with' => [
                'application_name' => env('APP_NAME', 'Laravel'),
                'environment' => env('APP_ENV', 'production'),
                'server' => gethostname(),
            ],
        ],

#【重要】关于上面ES的配置,并不一定和我上面的一致,因为ES版本不同要求的配置方式也不同,还需自己看当前版本的源码。 

默认日志是同步的

Laravel 支持的日志默认是同步执行的,如果想要实现异步可以利用 slack 或monolog 的其它支持、还可以基于它们自定义实现一下。

!完,你还想了解什么请留言讨论。

W+WPguiAgzFdKGh0dHBzOi8vYmxvZy5jc2RuLm5ldC93ZWl4aW5fNDQwMjY5NjIvYXJ0aWNsZS9kZXRhaWxzLzEzNTM4MjQzMCkKW+WPguiAgzJdKGh0dHBzOi8vYmxvZy5jc2RuLm5ldC9zYW5iaW5neXV0dW9uaWFvMTIzL2FydGljbGUvZGV0YWlscy83MTEyNTMwNCkKW+a6kOeggeWIhuaekF0oaHR0cHM6Ly96aHVhbmxhbi56aGlodS5jb20vcC82NzYzMDA4MTEp
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值