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-[date].log 文件名的日志
           	// 'days' => 14,  		//注释掉,可以实现永久保存
        ],
    ...
]

// 使用时调用写入指定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版本不同要求的配置方式也不同,还需自己看当前版本的源码。 

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

W+WPguiAgzFdKGh0dHBzOi8vYmxvZy5jc2RuLm5ldC93ZWl4aW5fNDQwMjY5NjIvYXJ0aWNsZS9kZXRhaWxzLzEzNTM4MjQzMCkKW+WPguiAgzJdKGh0dHBzOi8vYmxvZy5jc2RuLm5ldC9zYW5iaW5neXV0dW9uaWFvMTIzL2FydGljbGUvZGV0YWlscy83MTEyNTMwNCkKW+a6kOeggeWIhuaekF0oaHR0cHM6Ly96aHVhbmxhbi56aGlodS5jb20vcC82NzYzMDA4MTEp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/744669.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

理解CNN模型如何学习

深度学习模型常常被认为是不可解释的。但是人们正在探索不同的技术来解释这些模型内发生了什么。对于图像,由卷积神经网络学习的特征是可解释的。我们将探索两种流行的技术来理解卷积神经网络。 可视化中间层的输出 可视化中间层的输出将有助于我们理解输入图像如何…

办公软件的答案?ONLYOFFICE 桌面应用编辑器会是最好用的 Office 软件?ONLYOFFICE 桌面编辑器使用初体验

文章目录 📋前言🎯什么是 ONLYOFFICE🎯 主要功能介绍及 8.1 新功能体验🎯 在线体验📝最后 📋前言 提到办公软件,大家最常用的可能就是微软的 Microsoft Office 和国产的 WPS Office。这两款软件…

使用API有效率地管理Dynadot域名,为文件夹中的域名进行域名停放

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

解锁高效办公:ONLYOFFICE新版本8.1功能揭秘与个人实战体验

文章目录 💯ONLYOFFICE 桌面编辑器 8.1 ✍1 新增功能介绍✍2 轻松编辑器PDF文件🍓2.1 PDF新增编辑器操作🍓2.2 PDF新增表单操作 ✍3 用幻灯片版式快速修改幻灯片✍4 无缝切换文档编辑、审阅和查看模式✍5 改进从右至左语言的支持 & 新的本…

C++——布隆过滤器

目录 布隆过滤器的提出 布隆过滤器的概念 布隆过滤器的基本原理和特点 布隆过滤器的实现 布隆过滤器的插入 布隆过滤器的查找 布隆过滤器的删除 布隆过滤器的优点 布隆过滤器的缺陷 布隆过滤器使用场景 布隆过滤器的提出 在注册账号设置昵称的时候,为了保证…

【已解决】SpringBoot图片更新需重启服务器才能显示

问题描述 1、更新头像,并跳转回列表页,发现显示不出来 2、但是前端获取用户头像的信息是在加载页面就会被调用的,同时前端也不存在所谓的缓存问题,因为没有动这部分代码。 但查看响应是能获得正确的信息(前端打印图片…

Docker 下载与安装以及配置

安装yum工具 yum install -y yum-ulits配置yum源 阿里云源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Docker 17.03后为两个版本: 社区版(Community Edition,缩写为 CE&#x…

内网一键部署k8s-kubeshpere,1.22.12版本

1.引言 本文档旨在指导读者在内网环境中部署 Kubernetes 集群。Kubernetes 是一种用于自动化容器化应用程序部署、扩展和管理的开源平台,其在云原生应用开发和部署中具有广泛的应用。然而,由于一些安全或网络限制,一些组织可能选择在内部网络…

【踩坑】修复循环设置os.environ[‘CUDA_VISIBLE_DEVICES‘]无效

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 问题示例 for gpus in [0, 1, 2, 3, 4, 5, 6, 7]:os.environ[CUDA_VISIBLE_DEVICES] gpusprint(torch.cuda.get_device_name(0)) 始终将使用第…

专业技能篇---计算机网络

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么?二、Http的状态码有哪些?三、 HTTP与HTTPS有什么区别?四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别?六、GET与POST WebSock…

期货投机的操作

期货投机是一种高风险、高回报的投资方式,吸引着众多投资者参与。将深入探讨期货专业投机的操作秘诀,帮助投资者掌握必要的知识和技巧,在期货市场中驰骋。 一、期货专业投机的本质 期货投机是利用期货合约进行买卖,以赚取差价的一…

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型 提出背景拆解左侧:整体框架中间:Mamba块的细节右侧:螺旋扫描的细节 提出背景 论文:https://arxiv.org/pdf/2406.15910 代码:https://github.com/wongzbb…

JAVA【案例5-2】模拟默认密码自动生成

【模拟默认密码自动生成】 1、案例描述 本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。 2、案例目的 (1&#xff09…

超简单的nodejs使用log4js保存日志到本地(可直接复制使用)

引入依赖 npm install log4js 新建配置文件logUtil.js const log4js require(log4js);// 日志配置 log4js.configure({appenders: {// 控制台输出consoleAppender: { type: console },// 文件输出fileAppender: {type: dateFile,filename: ./logs/default, //日志文件的存…

【详述】BP神经网络建模流程一步一步详述

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、BP神经网络的建模流程二、BP神经网络的建模分步讲解2.1.数据归一化2.2.数据划分2.3.网络结构设置2.4.网络训练2.5.训练效果评估 本文梳理BP神经网络的建模流程,供大家建模时进行借鉴。 一、BP神经…

循环神经网络——RNN

循环神经网络 在之前NLP基础章节-语言模型中我们介绍了 n n n 元语法,其中单词 x t x_t xt​ 在时间步 t t t 的条件概率仅取决于前面 n n n 个单词,若是想要将之前单词的影响也加入那么模型参数数量会指数级增长。但是可能之前的单词存在重要的信息…

进阶篇08——MySQL管理

系统数据库 常用工具 mysql 客户端工具 mysqladmin 执行管理操作 mysqlbinlog 数据库二进制日志转成文本 mysqlshow 数据库查找 mysqldump 数据库备份 mysqlimport/source 数据库导入

LLM大语言模型-AI大模型全面介绍

简介: 大语言模型(LLM)是深度学习的产物,包含数十亿至数万亿参数,通过大规模数据训练,能处理多种自然语言任务。LLM基于Transformer架构,利用多头注意力机制处理长距离依赖,经过预训…

Python-爬虫 下载天涯论坛帖子

为了爬取的高效性,实现的过程中我利用了python的threading模块,下面是threads.py模块,定义了下载解析页面的线程,下载图片的线程以及线程池 import threading import urllib2 import Queue import re thread_lock threading.RL…

宝塔计划任务调用node程序时,log4js日志保存本地位置会发生变化

接我上一篇文章的情况 超简单的nodejs使用log4js保存日志到本地(可直接复制使用)-CSDN博客 原本应当保存在node项目目录下的日志文件,如果使用宝塔的计划任务来定时执行的话,日志保存路径会发生变化到如下图的位置: 如…