在python中记录log

只记录log,不同步打印到控制台

import logging
import os
from datetime import datetime# 获取当前日期
date = datetime.now().strftime('%Y-%m-%d')# 获取当前文件的目录
current_path = os.path.dirname(os.path.abspath(__file__))
log_path = os.path.join(current_path, 'log')# 如果log文件夹不存在,创建它
if not os.path.exists(log_path):os.makedirs(log_path)# 设置日志文件的路径
log_file = os.path.join(log_path, f'console_{date}.log')# 配置日志设置
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',filename=log_file)logger = logging.getLogger(__name__)
logger.info('This is a log info')

在这个例子中,我们首先使用datetime.now().strftime('%Y-%m-%d')获取了当前日期,并将其格式化为YYYY-MM-DD的形式。然后我们将这个日期字符串用来命名我们的日志文件。其他部分与前一个示例类似,我们创建了日志文件所在的文件夹,并配置了日志的设置。

如果出现下面错误:

AttributeError: module ‘datetime’ has no attribute ‘now’

原因:这是因为datetime既是Python标准库中的一个模块,也是该模块中的一个类。你需要先引用模块,然后再引用类。然而你import时用的是import datetime,不是from datetime import datetim
如果还不行的话,可能是你的Python环境中有一个名为datetime的其他模块或者变量,这导致了命名冲突。你可以尝试使用import datetime,然后用datetime.datetime.now()来获取当前日期。

下面是两种引用方式

from datetime import datetime
date = datetime.now().strftime('%Y-%m-%d')
import datetime 
date = datetime.datetime.now().strftime('%Y-%m-%d')

记录log,并同步打印到控制台

import logging
import os
from datetime import datetime# 获取当前日期
date = datetime.now().strftime('%Y-%m-%d')# 获取当前文件的目录
current_path = os.path.dirname(os.path.abspath(__file__))
log_path = os.path.join(current_path, 'log')# 如果log文件夹不存在,创建它
if not os.path.exists(log_path):os.makedirs(log_path)# 设置日志文件的路径
log_file = os.path.join(log_path, f'console_{date}.log')# 创建一个logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)# 创建一个handler,用于写入日志文件
fh = logging.FileHandler(log_file)
fh.setLevel(logging.INFO)# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)# 给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)# 记录一条日志
logger.info('This is a log info')

在这个示例中,我们首先创建了一个logger,然后创建了两个handler:一个FileHandler用于写入日志文件,一个StreamHandler用于输出到控制台。我们为这两个handler设置了相同的日志级别和格式,然后将它们添加到了logger。最后,我们使用logger.info()记录了一条日志,这条日志将同时输出到日志文件和控制台。

同时记录到控制台和日志,对性能影响多大?

在大多数情况下,同时记录日志到控制台和文件对性能的影响是可以接受的。
日志系统的性能开销主要取决于三个因素:
日志级别:日志系统只会记录日志级别大于或等于其当前级别的消息。例如,如果将日志级别设置为INFO,那么DEBUG级别的日志消息将不会被记录。因此,可以通过调整日志级别来控制日志系统的性能开销。
日志量:如果每秒产生大量的日志消息,那么日志系统的性能开销可能会变得很大。在这种情况下,可能需要对日志消息进行采样,或者只记录关键的日志消息。
日志处理器的性能:不同的日志处理器可能会有不同的性能开销。例如,将日志消息写入磁盘通常比写入网络或数据库要快。
总的来说,如果你的应用程序不是在大量生成日志,那么同时记录到控制台和日志文件的性能影响应该是可以忽略不计的。如果你发现日志系统的性能开销过大,那么你应该考虑调整日志级别,减少日志量,或者优化你的日志处理器配置。

log相关类型

Python的logging模块提供了以下几种日志级别:
DEBUG: 最详细的日志信息,典型应用场景是问题诊断。
INFO: 稍微详细一点的信息,确认程序按预期运行。
WARNING: 表示有些意外,或者不久的将来可能出现的问题(例如:‘磁盘空间不足’)。程序还是会按预期运行。
ERROR: 更严重的问题,程序没能执行某些功能。
CRITICAL: 非常严重的问题,程序本身可能无法继续运行。
以上级别从低到高,数字级别依次为10,20,30,40,50,级别越高,越严重。默认的级别是WARNING,意味着只有事件的级别等于或高于WARNING才会被追踪,记录。

你可以使用以下的方法来在不同的级别记录消息:
logger.debug(message, *args, **kwargs)
logger.info(message, *args, **kwargs)
logger.warning(message, *args, **kwargs)
logger.error(message, *args, **kwargs)
logger.critical(message, *args, **kwargs)
另外,还有一个方法是logger.exception(message, *args, **kwargs),这个方法创建一个类似于logger.error的日志消息,同时将当前的异常信息添加到日志消息中。这个方法应该只在异常处理程序中调用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AIGC] 对比MySQL全文索引,RedisSearch,和Elasticsearch的详细区别

全文搜索是数据库和搜索引擎的重要功能。这个功能能在一个或多个列中查找用户查询的文本,这对诸如电子商务网站和检索大量文本数据的应用是必需的。在这篇文章中,我们将详细对比三种主流全文搜索技术: MySQL全文索引,Redis的Redis…

【Ucore操作系统】8. 并发

文章目录 【 0. 引言 】0.1 线程定义0.2 同步互斥 【 1. 内核态的线程管理 】1.1 线程概念1.2 线程模型与重要系统调用1.2.1 线程创建系统调用1.2.2 等待子线程系统调用1.2.3 进程相关的系统调用 1.3 应用程序示例1.3.1 系统调用封装1.3.2 多线程应用程序 – threads 1.4 线程管…

考研数学|《660题》这样刷最有效!

考研数学660题作为许多考研学子在备考过程中重要的复习资料之一,自然也有很多同学会有660该怎么刷的问题。为了更有效率地使用这些题目,希望以下策略能帮到大家, 首先,你需要根据自己的实际情况,制定一个合理的学习计…

【网安】DDoS攻击:方法、影响与防御策略

【网安】DDoS攻击:方法、影响与防御策略 前言DDoS攻击实现的常见方法Volumetric Attacks(流量攻击)UDP FloodICMP (Ping) Flood Protocol Attacks(协议攻击)SYN Flood Application Layer Attacks(应用层攻击…

就业班 第二阶段 2401--3.25 day5 mycat读写分离

[TOC] 启动并更改临时密码 [rootmysql1~]# systemctl start mysqld && passwdgrep password /var/log/mysqld.log | awk END{ print $NF} && mysqladmin -p"$passwd" password Qwer123..; MyCAT读写分离 Mycat 是一个开源的数据库系统,但…

简明 Python 教程(第1章安装Python)

Linux和BSD用户: 如果你使用的是Linux发行版(如Fedora、Mandrake)或BSD系统(如FreeBSD),你的系统可能已经预装了Python。可以通过在终端中输入python -V来检查是否安装了Python以及其版本。如果没有安装Py…

​LeetCode解法汇总518. 零钱兑换 II

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给你一个整数数组 coins 表示不同面额的硬…

关于对postcss安装和使用比较详细

PostCSS是一款强大的CSS工具,它可以自动解析CSS代码,应用一系列的插件,然后输出转换后的CSS。PostCSS本身是一个功能相对简单的工具,但它的强大之处在于其插件生态系统,这些插件提供了各种各样的功能,如自动…

leetcode-简单题-数学算法题

2469. 温度转换 - 力扣(LeetCode) 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。 你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahren…

LeetCode-1669题:合并两个链表(原创)

【题目描述】 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果: 请你返回结果链表的头指针。 【…

通俗易懂:MySQL中的FOREIGN KEY约束有什么作用?如何创建和删除?

在MySQL数据库中,FOREIGN KEY(外键)约束是一个重要的概念,它主要用于维护数据库表之间的引用完整性。其主要作用有以下几点: 1. 参照完整性保证 - 外键约束确保了一个表(称作“从表”或“子表”&#xff09…

【办公类-21-11】 20240327三级育婴师 多个二级文件夹的docx合并成docx有页码,转PDF

背景展示:有页码的操作题 背景需求: 实操课终于全部结束了,把考试内容(docx)都写好了 【办公类-21-10】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行…

数据库学习(四)mybatis

Mybatis Mybatis是一个基于数据持久层(DAO层)的一款框架,他能极大的简化Java中连接数据库,操作数据库也就是jdbc的操作。 在定义mybatis相关接口时,不需要定义实现类,因为在程序启动时,mybati…

docker启动rocketmq简洁教程

docker启动rocketmq 打开云服务器防火墙 配置外网访问创建容器外部存储文件:mkdir -p /root/rocketmq/data/namesrv/logs /root/rocketmq/data/namesrv/store /root/rocketmq/conf /root/rocketmq/data/broker/logs /root/rocketmq/data/broker/store进入到 /root/…

Python环境下一种新的类谱峭度算法的旋转机械故障诊断模型

谱峭度SK的本质是计算每根谱线峭度值的高阶统计量,谱峭度对信号中的瞬态冲击成分十分敏感,能有效的从含有背景噪声信号中识别瞬态冲击及其在频带中的分布。由于谱峭度的复杂性、缺少一个正式的定义和一个容易理解的计算过程使其在很长时间内都未能引入到…

Redis入门到实战-第六弹

Redis实战热身Lists篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息代理和流…

kubectl 启用shell自动补全功能

官网手册参考:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/ 系统:centos7 补全脚本依赖于工具 bash-completion, 所以要先安装它(可以用命令 type _init_completion 检查 bash-completion 是否已安装&a…

PTA布尔矩阵的奇偶性

一个布尔方阵具有奇偶均势特性,当且仅当每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性: ⎣⎡​1010​0011​1010​0011​⎦⎤​ 编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有…

2024年腾讯云优惠券领取教程及使用攻略分享

随着云计算技术的快速发展,腾讯云作为国内领先的云计算服务提供商,为企业和个人提供了丰富的云产品和服务。为了帮助大家更好地了解和使用腾讯云,本文将为大家详细介绍2024年腾讯云优惠券领取教程及使用攻略。 一、腾讯云优惠券介绍说明 腾讯…

linux性能调优汇总(一)cpu

目录 一、引言 二、CPU ------>2.1、/proc/cpuinfo ------>2.2、cpuid指令 ------>2.3、lscpu ------>2.4、turbostat ------>2.5、rdmsr ------>2.6、perf ------>2.7、top ------>2.8、ps ------>2.9、pidstat 查看每个进程CPU、内存、…