扩展阅读:
Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解
现在有下面的Python代码:
# -*- coding: utf-8 -*-
content = "i love you"
print(content)
现在要把代码中print语句中的内容以日志文件的形式输出:
可以像下面这样实现:
# -*- coding: utf-8 -*-
import logging
# 设置日志配置
logging.basicConfig(filename='E:/log/my_log_file_01.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
content = "i love you"
logging.debug(content)
上面的代码,如果认真读过我的另一篇博文:Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 那么理解起来应该是没有问题。
不过还是补充说明一些吧。
在上面的代码中:
level=logging.DEBUG
设置日志级别为 DEBUG,这意味着只有 DEBUG 级别及以上的日志消息会被记录。你可以根据需要更改级别。format='%(asctime)s - %(levelname)s - %(message)s'
设置日志的格式,包括时间、日志级别和消息。你可以根据需要进行自定义。
问:在上面的代码中,直接对类logging就进行了配置,没有实例化对象,在使用debug()方法的时候也没有实例化对象进行使用,这是Python的什么语法现象?
答:在上面的代码中,使用了 logging.basicConfig
来配置全局的日志记录设置,而没有创建 logging
模块的实例。这是因为 logging
模块在 Python 中是一个内置的模块,并且提供了一个默认的全局日志记录器,这个记录器的名字叫作根日志记录器(root logger)。
logging.basicConfig
的作用是配置根日志记录器(root logger)。根日志记录器是 logging
模块中的顶层记录器,其他记录器可以是它的子记录器。当你在应用中使用 logging
模块时而没有实例化对象时, Python会自动生成一个隐式匿名的logging对象,以便你能够直接使用 logging
的函数。
在实际应用中,你可以创建自己的记录器实例,以满足更复杂的日志记录需求。但是对于简单的用例,直接配置并引用根记录器是很方便的。在这种情况下,使用 logging
模块的函数(例如 logging.info
)会默认使用根记录器。
运行上面的代码后:
在路径E:\log\
下生成了日志文件:my_log_file_01.log
内容如下:
我们修改下变量content的内容为"i love you02",再次运行上面的代码,发现原来的日志文件并没有被覆盖,而是被追加到了后面。如下图所示:
扩展阅读:
Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解