python日志输出----logging浅析与使用

python日志输出----logging浅析与使用历史记录目录1.概述 (4)2.Logging模块简介 (4)2.1日志级别 (4)2.2日志输出方式 (5)2.2.1打印到终端 (5)2.2.2打印到指定文件 (6)2.2.3多模块打印 (6)2.2.4特殊的basicConfig函数 (7)3.Logging.basicConfig函数 (7)3.1参数列表 (8)3.2向多个文件输出日志 (8)4.logging中几个比较中要的类 (9)1.概述如果使用Python写一个比较大型的程序,你一定会用上日志系统。

特别是Python这样的动态语言,很多错误都只能在运行的时候才能发现,一个好的日志系统对于Python程序相当重要。

Python提供了一个日志模块logging,它可以把我们的想要的信息全部保存到一个日志文件中,方便我们查看。

给个最简单的例子:将下面代码保存为log.py文件,import loggingLOG_FILENAME="/root/project/log.txt"logging.basicConfig(filename=LOG_FILENAME,level=)("This message should go to the log file")每运行一次就会往/root/project/log.txt文件中,添加一行信息。

其实这就是实现了一个简单的日志记录。

2.Logging模块简介Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等。

logging的行为依靠调用 Logger 类的方法来实现,实例一般叫做logger。

每个实例都拥有自己的名字,并且可以通过点来分割具备层次的名字,logger的名字指示了他属于应用程序的哪个位臵。

2.1日志级别日志模块Logging根据事件的严重程度,提供六种不同级别的日志记录,提示日志的重要程度,他们分别是:NOTSET, DEGUB, INFO, WARNING, ERROR, CRITICAL。

我们可以从字面上理解这五种级别,即调试信息,提示信息,警告,出错和严重出错(可能导致程序根本无法运行)等。

表一logging日志级别模块默认级别设臵为WARNING,即当且仅当等于或高于WARNING的事件会被记录下来,其余的忽略不计。

我们可以做个小测试如下:现在对上面的程序加以修改:将第四行改为:logging.debug("This message should go to the log file")可以看到,我们将输出的log信息由info转为debug,此时运行该脚本,发现log.txt 文本中,并没有添加信息,原因在于debug级别低于info级别,而配臵时,设定level为INFO。

即低于level设定的级别的日志信息,logging是自动忽略,不计入的。

2.2日志输出方式日志信息会被编码为 LogRecord 类,当logger决定记录一个事件时,就会为日志信息创建一个LogRecord实例。

日志信息会被发布(dispatch)机制通过handler来发布出去,这些handler继承自 Handler 类。

Handler负责把日志信息(LogRecord的实例)发布到对应的位臵。

每个logger都可以拥有0个或多个handler,通过 addHandler() 方法添加。

除了handler与logger的组合之外,所有的handler还会被其父logger所调用来发布信息。

(可以看下述3.2节例子)。

有如logger,handler也可以有自己的级别过滤器,用于过滤日志级别。

如果一个handler决定发布一个事件,可以调用 emit() 来发送信息到目的。

大多数用户继承的Handler的子类需要重载这个emit()方法。

2.2.1打印到终端例子:>>> import logging>>>logging.error(‘chu cuo’)>>>(‘I told you!’)运行结果:在终端上显示ERROR:root: chu cuo。

代码中Info信息不会显示,原因:info级别比logging默认的级别低,所以被忽略。

2.2.2打印到指定文件例子:import logginglogging.basicConfig(filename='root/log.txt',level=logging.DEBUG)logging.debug('This message should go to the log file')('So should this')logging.warning('And this, too')运行后在终端下打开/root/log.txt,显示信息:DEBUG:root:This message should go to the log fileINFO:root:So should thisWARNING:root:And this, too2.2.3多模块打印例子:其中一个文件myapp.py# myapp.pyimport loggingimport mylibdef main():logging.basicConfig(filename='myapp.log', level=)('Started')mylib.do_something()('Finished')if __name__ == '__main__':main()# myapp.py end另一个文件mylib.py# mylib.pyimport loggingdef do_something():('Doing something')# mylib.py end运行myapp.py得出myapp.log文件中有以下三行信息:INFO:root:StartedINFO:root:Doing somethingINFO:root:Finished注意:我们可以看出在第二个文件mylib.py同样也导入了logging模块,但该模块中没有定义日志输出的路径,但最终结果同样显示在第一个文件中规定的日志文件中。

2.2.4特殊的basicConfig函数我们再看下面一个代码:# myapp.pyimport loggingLOG_FILENAME="/root/project/log.txt"logging.basicConfig(filename=LOG_FILENAME,level=)("This message should go to the log file")LOG_FILENAME="/root/project/log2.txt"logging.basicConfig(filename=LOG_FILENAME,level=)("This message should go to the log file2")运行myapp.py,你觉得这个日志会记录到哪里呢?答案是:全部记录到/root/project/log.txt文件下。

这是因为logging的basicConfig函数。

3.Logging.basicConfig函数官方文档上说basicConfig是为root logger创建一个句柄(StreamHandler)当未给root logger创建一个句柄时,logging的debug(), info(), warning(), error()和critical()函数会自动调用系统默认的basicConfig()函数。

注意:如果root logger已经存在一个句柄时,basicConfig()函数并不会创建新的句柄,即上述代码中,第二个basicConfig函数并没有为root logger创建新句柄。

所以日志输出仍会输出到第一个日志文件中。

3.1参数列表3.2向多个文件输出日志上述所说basicConfig函数会为root logger创建句柄,但如果root logger已经存在句柄的情况下,就不会创建新的句柄,这样就会导致日志文件只会输出到一个文件中。

假如我们现在必须将一个日志记录存入两个不同的文本要怎么办呢?其实python也提供了自己的方法——使用2.2中提到的addHandler()方法。

用法如下:#log4py.pyimport loggingimport logging.handlersLOG_FILE = '/root/log123.txt'_email=logging.getLogger('email')ch = logging.handlers.RotatingFileHandler(LOG_FILE)formatter = logging.Formatter("[%(asctime)s]%(levelname)s:%(message)s")ch.setFormatter(formatter)_email.addHandler(ch)_email.setLevel(logging.DEBUG)_("some information")LOG_FILE = '/root/new_log123.txt'_name=logging.getLogger('name')ch1 = logging.handlers.RotatingFileHandler(LOG_FILE)formatter = logging.Formatter("[%(asctime)s]%(levelname)s:%(message)s")ch1.setFormatter(formatter)_name.addHandler(ch1)_name.setLevel(logging.DEBUG)_("new some information")运行:>>>import logging //默认为root logger,默认打印到终端>>>import log4py结果:INFO:email:some informationINFO:name:new some information终端显示上述两句话,同时在/root/log123.txt和/root/new_log123.txt文件中生成对应的日志。

合集下载

Python之日志操作(logging)

Python之日志操作(logging)

Python之⽇志操作(logging)import logging1、⾃定义⽇志级别,⽇志格式,输出位置logging.basicConfig(level=logging.DEBUG,format='%(asctime)s | %(levelname)s| %(message)s‘,%(name)s root log是?filename='filepath'filemode='w')level :指定root logger的⽇志级别(DEBUG)format:⽇志格式filename:⽂件写⼊的路径filemode:末填写,默认是追加⽅式’a‘⽇志级别排序:CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTESTlogging.debug('debug info')('info log')logging.warning('warning log')logging.error('error log')级别从低到⾼结果:2017-06-25 09:12:00,025 | DEBUG| debug info2017-06-25 09:12:00,025 | INFO| info log2017-06-25 09:12:00,025 | WARNING| warning log2017-06-25 09:12:00,025 | ERROR| error log(1)format:指定handler使⽤的⽇志显⽰格式,即⽇志打印的格式字符串。

可⽤到的格式化串:%(name)s:Logger的名字;%(levelno)s:⽇志级别的数值;%(levelname)s:⽇志级别名称;%(pathname)s:当前执⾏程序的路径,其实就是sys.argv[0],可能没有;%(filename)s:调⽤⽇志输出函数的模块的⽂件名;%(module)s:当前执⾏程序的程序名;%(funcName)s:⽇志输出函数的函数名;%(lineno)d:⽇志输出函数的语句所在的代码⾏;%(created)f:当前时间,⽤UNIX标准的表⽰时间的浮点数表⽰;%(relativeCreated)d:输出⽇志信息时的,⾃Logger创建以来的毫秒数;%(asctime)s:字符串形式的当前时间。

python日志logging模块详细解析

python日志logging模块详细解析

python⽇志logging模块详细解析Python 中的 logging 模块可以让你跟踪代码运⾏时的事件,当程序崩溃时可以查看⽇志并且发现是什么引发了错误。

Log 信息有内置的层级——调试(debugging)、信息(informational)、警告(warnings)、错误(error)和严重错误(critical)。

你也可以在 logging 中包含 traceback 信息。

不管是⼩项⽬还是⼤项⽬,都推荐在 Python 程序中使⽤ logging。

本⽂给⼤家介绍python ⽇志 logging模块介绍。

1 基本使⽤配置logging基本的设置,然后在控制台输出⽇志,import logginglogging.basicConfig(level = ,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')logger = logging.getLogger(__name__)("Start print log")logger.debug("Do something")logger.warning("Something maybe fail.")("Finish")运⾏时,控制台输出,2016-10-09 19:11:19,434 - __main__ - INFO - Start print log2016-10-09 19:11:19,434 - __main__ - WARNING - Something maybe fail.2016-10-09 19:11:19,434 - __main__ - INFO - Finishlogging中可以选择很多消息级别,如debug、info、warning、error以及critical。

logger在python中的用法

logger在python中的用法

logger在python中的用法在Python中,可以使用内置的logging模块来实现日志记录。

Logger是logging模块的主要组件,用于产生和处理日志消息。

下面是logger在Python中的基本用法:1.导入logging模块:`import logging`2.创建一个logger对象:`logger =logging.getLogger('my_logger')`3.设置日志级别(可选):`logger.setLevel(logging.DEBUG)`,可以设置为DEBUG、INFO、WARNING、ERROR或CRITICAL。

4.创建一个文件处理器(可选):`file_handler =logging.FileHandler('log.txt')`-可以指定日志文件的名称和路径,如果不指定则默认输出到控制台。

-可以设置文件处理器的日志级别,例如:`file_handler.setLevel(logging.DEBUG)`5.创建一个格式化器:`formatter =logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')`-可以使用不同的格式来定制日志消息的展示方式。

6.将格式化器添加到文件处理器中:`file_handler.setFormatter(formatter)`7.将文件处理器添加到logger对象中:`logger.addHandler(file_handler)`-可以添加多个处理器,比如同时输出到文件和控制台。

8.使用logger对象记录日志消息:`logger.debug('Debug message')`-可以根据需要记录不同级别的日志消息,例如:debug、info、warning、error、critical。

Python中logging日志详解

Python中logging日志详解

Python中logging⽇志详解logging模块什么是logging模块logging模块是python提供的⽤于记录⽇志的模块为什么需要logging我们完全可以⾃⼰打开⽂件然后,⽇志写进去,但是这些操作重复且没有任何技术含量,所以python帮我们进⾏了封装,有了logging后我们在记录⽇志时只需要简单的调⽤接⼝即可,⾮常⽅便!⽇志级别在开始记录⽇志前还需要明确,⽇志的级别随着时间的推移,⽇志记录会⾮常多,成千上万⾏,如何快速找到需要的⽇志记录这就成了问题解决的⽅案就是给⽇志划分级别logging模块将⽇志分为了五个级别,从⾼到低分别是:常规信息2.debug 调试信息3.warning 警告信息4.error 错误信息5.cretical 严重错误本质上他们使⽤数字来表⽰级别的,从⾼到低分别是10,20,30,40,50logging模块的使⽤#1.导⼊模块import logging#2.输出⽇志("info")logging.debug("debug")logging.warning("warning")logging.error("error")logging.critical("critical")#输出 WARNING:root:warning#输出 ERROR:root:error#输出 CRITICAL:root:critical我们发现info 和 debug都没有输出,这是因为它们的级别不够,默认情况下:logging的最低显⽰级别为warning,对应的数值为30⽇志被打印到了控制台⽇志输出格式为:级别⽇志⽣成器名称⽇志消息如何修改这写默认的⾏为呢?,这就需要我们⾃⼰来进⾏配置⾃定义配置import logginglogging.basicConfig()"""可⽤参数filename:⽤指定的⽂件名创建FiledHandler(后边会具体讲解handler的概念),这样⽇志会被存储在指定的⽂件中。

pythonlogging用法的简单总结

pythonlogging用法的简单总结

pythonlogging⽤法的简单总结⽬录官⽅⽂档:基本⽤法logging默认配置了六种⽇志级别(括号为级别对应的数值),按优先级升序,依次为:NOTSET(0)DEBUG(10)INFO(20)WARNING(30)ERROR(40)CRITICAL(50)logging 执⾏时输出⼤于等于设置的⽇志级别的⽇志信息,如设置⽇志级别是 INFO,则 INFO、WARNING、ERROR、CRITICAL 级别的⽇志都会输出先来看⼀个简单的⽤法⽰例:import logginglogging.basicConfig() # ⾃动化配置logging.warning('This is a warning message') # 默认的⽇志输出级别为Warninglogging.basicConfig(**kwargs) 中常⽤的参数包括:filename:指定使⽤指定的⽂件名⽽不是 StreamHandler 创建 FileHandlerfilemode:如果指定 filename,则以此模式打开⽂件(‘r’、‘w’、‘a’)。

默认为“a”format:配置⽇志格式字符串,参考:datefmt:配置时间格式字符串,⽀持time.strftime() 所接受的⽇期/时间格式level:指定⽇志记录器级别,默认为WARNINGhandlers:指定handlers,注意此参数与filename和filemode不兼容,同时配置时会报错basicConfig配置⽰例:logging.basicConfig(filename="test.log",filemode="w",format="%(asctime)s %(name)s:%(levelname)s:%(message)s",datefmt="%d-%M-%Y %H:%M:%S",level=logging.DEBUG)进阶配置我们先了解⼀下logging中的主要模块:Loggers:expose the interface that application code directly uses.Handlers:send the log records (created by loggers) to the appropriate destination.Filters:provide a finer grained facility for determining which log records to output.Formatters:specify the layout of log records in the final output.程序中发送的⽇志信息将被包装成对象传⼊logging的各个组件中:Loggersobjects have a threefold job. First, they expose several methods to application code so that applications can log messages at runtime. Second, logger objects determine which log messages to act upon based upon severity (the default filtering facility) or filter objects. Third, logger objects pass along relevant log messages to all interested log handlers.Logger与handler之间的关系类似于邮件和邮箱,⼀封邮件可以在需要的时候抄送⾄多个收件箱。

python的logging使用方法

python的logging使用方法

python的logging使用方法在Python中,logging模块是一个用于记录日志信息的强大工具。

它可以帮助开发者进行调试和监控程序运行过程中的错误和异常。

下面是Python中使用logging模块的方法:1. 导入logging模块:首先,在你的Python脚本中导入logging模块,可以使用以下代码实现:```pythonimport logging```2. 配置日志:接下来,需要配置日志记录的方式和格式。

例如,你可以将日志信息打印到控制台,也可以将其记录到文件中。

可以通过以下代码进行基本的日志配置:```pythonlogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')```这里的`level=logging.DEBUG`表示记录的日志级别为DEBUG,即最详细的日志信息。

`format='%(asctime)s - %(levelname)s - %(message)s'`定义了日志的格式,包括时间、日志级别和日志信息。

3. 记录日志:现在,你可以使用logging模块记录日志了。

常见的日志级别包括DEBUG、INFO、WARNING、ERROR和CRITICAL。

例如,使用`logging.debug()`函数记录DEBUG级别的日志,使用`logging.error()`函数记录ERROR级别的日志,具体使用方法如下:```pythonlogging.debug('This is a debug message')logging.error('This is an error message')```4. 日志级别:logging模块提供了不同级别的日志记录,你可以根据需要选择适当的级别。

logging库用法

logging库用法logging库是Python的日志管理软件,类似于print但比它更加强大。

logging库可以用于创建记录器、处理器和格式化器,将日志信息发送到不同位置并按照指定的样式显示。

以下是logging库的用法:1. 创建记录器:使用(name)方法创建一个记录器,其中name是记录器的名称,可以根据需要自行命名。

如果不指定名称,则使用根记录器。

```pythonimport logginglogger = ('my_logger')```2. 创建处理器:使用()、()、()等方法创建一个处理器,用于将日志信息发送到控制台、文件、网络等不同位置。

```pythonimport logginglogger = ('my_logger')console_handler = () 创建一个控制台处理器```3. 创建格式化器:使用()方法创建一个格式化器,用于将日志信息格式化为指定的样式。

```pythonimport logginglogger = ('my_logger')formatter = ('%(asctime)s - %(name)s - %(levelname)s -%(message)s') 创建一个格式化器```4. 设置日志级别:使用()方法设置日志级别,只有级别高于或者等于日志级别的日志才会被输出,低于该等级的日志将会被丢弃。

```pythonimport logginglogger = ('my_logger')(level=) 设置日志级别为DEBUG```5. 记录日志:使用logger对象的方法记录不同级别的日志信息,如debug()、info()、warning()、error()和critical()。

```pythonimport logginglogger = ('my_logger')('This is a debug message') 记录调试信息('This is an info message') 记录一般信息('This is a warning message') 记录警告信息('This is an error message') 记录错误信息('This is a critical message') 记录严重错误信息```。

Python中logging日志的四个等级和使用

Python中logging⽇志的四个等级和使⽤1. logging⽇志的介绍在现实⽣活中,记录⽇志⾮常重要,⽐如:银⾏转账时会有转账记录;飞机飞⾏过程中,会有个⿊盒⼦(飞⾏数据记录器)记录着飞机的飞⾏过程,那在咱们python程序中想要记录程序在运⾏时所产⽣的⽇志信息,怎么做呢?可以使⽤ logging 这个包来完成记录程序⽇志信息的⽬的是:1. 可以很⽅便的了解程序的运⾏情况2. 可以分析⽤户的操作⾏为、喜好等信息3. ⽅便开发⼈员检查bug2. logging⽇志级别介绍⽇志等级可以分为5个,从低到⾼分别是:1. DEBUG2. INFO3. WARNING4. ERROR5. CRITICAL⽇志等级说明:DEBUG:程序调试bug时使⽤INFO:程序正常运⾏时使⽤WARNING:程序未按预期运⾏时使⽤,但并不是错误,如:⽤户登录密码错误ERROR:程序出错误时使⽤,如:IO操作失败CRITICAL:特别严重的问题,导致程序不能再继续运⾏时使⽤,如:磁盘空间为空,⼀般很少使⽤默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录⽇志信息。

⽇志等级从低到⾼的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL3. logging⽇志的使⽤在 logging 包中记录⽇志的⽅式有两种:1.输出到控制台2.保存到⽇志⽂件⽇志信息输出到控制台的⽰例代码:import logginglogging.debug('这是⼀个debug级别的⽇志信息')('这是⼀个info级别的⽇志信息')logging.warning('这是⼀个warning级别的⽇志信息')logging.error('这是⼀个error级别的⽇志信息')logging.critical('这是⼀个critical级别的⽇志信息')运⾏结果:WARNING:root:这是⼀个warning级别的⽇志信息ERROR:root:这是⼀个error级别的⽇志信息CRITICAL:root:这是⼀个critical级别的⽇志信息说明:⽇志信息只显⽰了⼤于等于WARNING级别的⽇志,这说明默认的⽇志级别设置为WARNINGlogging⽇志等级和输出格式的设置:import logging# 设置⽇志等级和输出⽇志格式logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')logging.debug('这是⼀个debug级别的⽇志信息')('这是⼀个info级别的⽇志信息')logging.warning('这是⼀个warning级别的⽇志信息')logging.error('这是⼀个error级别的⽇志信息')logging.critical('这是⼀个critical级别的⽇志信息')运⾏结果:2019-02-13 20:41:33,080 - hello.py[line:6] - DEBUG: 这是⼀个debug级别的⽇志信息2019-02-13 20:41:33,080 - hello.py[line:7] - INFO: 这是⼀个info级别的⽇志信息2019-02-13 20:41:33,080 - hello.py[line:8] - WARNING: 这是⼀个warning级别的⽇志信息2019-02-13 20:41:33,080 - hello.py[line:9] - ERROR: 这是⼀个error级别的⽇志信息2019-02-13 20:41:33,080 - hello.py[line:10] - CRITICAL: 这是⼀个critical级别的⽇志信息代码说明:level 表⽰设置的⽇志等级format 表⽰⽇志的输出格式, 参数说明:%(levelname)s: 打印⽇志级别名称%(filename)s: 打印当前执⾏程序名%(lineno)d: 打印⽇志的当前⾏号%(asctime)s: 打印⽇志的时间%(message)s: 打印⽇志信息⽇志信息保存到⽇志⽂件的⽰例代码:import logginglogging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',filename="log.txt",filemode="w")logging.debug('这是⼀个debug级别的⽇志信息')('这是⼀个info级别的⽇志信息')logging.warning('这是⼀个warning级别的⽇志信息')logging.error('这是⼀个error级别的⽇志信息')logging.critical('这是⼀个critical级别的⽇志信息')运⾏结果:4. logging⽇志在mini-web项⽬中应⽤web.py 程序使⽤logging⽇志⽰例:1. 程序⼊⼝模块设置logging⽇志的设置import socketimport threadingimport sysimport frameworkimport logging# logging⽇志的配置logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',filename="log.txt",filemode="w")2. INFO级别的⽇志输出,⽰例代码:# 判断是否是动态资源请求if request_path.endswith(".html"):"""这⾥是动态资源请求,把请求信息交给框架处理"""("动态资源请求:" + request_path)...else:"""这⾥是静态资源请求"""("静态资源请求:" + request_path)3. WARNING级别的⽇志输出,⽰例代码:# 获取命令⾏参数判断⻓度if len(sys.argv) != 2:print("执⾏命令如下: python3 xxx.py 9000")logging.warning("⽤⼾在命令⾏启动程序参数个数不正确!")return# 判断端⼝号是否是数字if not sys.argv[1].isdigit():print("执⾏命令如下: python3 xxx.py 9000")logging.warning("⽤⼾在命令⾏启动程序参数不是数字字符串!")returnframework.py 程序使⽤logging⽇志⽰例:1.ERROR级别的⽇志输出,⽰例代码:# 处理动态资源请求def handle_request(env):# 获取动态请求资源路径request_path = env["request_path"]print("接收到的动态资源请求:", request_path)# 遍历路由列表,选择执⾏的函数for path, func in route_list:if request_path == path:result = func()return resultelse:logging.error("没有设置相应的路由:" + request_path)# 没有找到动态资源result = not_found()return result说明:logging⽇志配置信息在程序⼊⼝模块设置⼀次,整个程序都可以⽣效。

python中使用logging将日志写入文件或输出到控制台

python中使⽤logging将⽇志写⼊⽂件或输出到控制台import loggingimport osclass Logger:def__init__(self, name=__name__):# 创建⼀个logggerself.__name = nameself.logger = logging.getLogger(self.__name)self.logger.setLevel(logging.DEBUG)# 创建⼀个handler,⽤于写⼊⽇志⽂件log_path = os.path.dirname(os.path.abspath(__file__))logname = log_path + '/' + 'out.log'# 指定输出的⽇志⽂件名# fh = logging.handlers.TimedRotatingFileHandler(logname, when='M', interval=1, backupCount=5,encoding='utf-8') # 指定utf-8格式编码,避免输出的⽇志⽂本乱码 fh = logging.FileHandler(logname, mode='w', encoding='utf-8') # 不拆分⽇志⽂件,a指追加模式,w为覆盖模式fh.setLevel(logging.DEBUG)# 创建⼀个handler,⽤于将⽇志输出到控制台ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)# 定义handler的输出格式formatter = logging.Formatter('%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]''-%(levelname)s-[⽇志信息]: %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')fh.setFormatter(formatter)ch.setFormatter(formatter)# 给logger添加handlerself.logger.addHandler(fh)self.logger.addHandler(ch)@propertydef get_log(self):"""定义⼀个函数,回调logger实例"""return self.loggerlog = Logger(__name__).get_loglog.error('模块直接执⾏打印⽇志')# if __name__ == '__main__':# a = Logger().get_log# a.error('模块直接执⾏打印⽇志')1. 如果模块是被直接执⾏,__name__的值为’__main__’2. 如果模块是被导⼊,__name__的值为模块名字。

Pythonlogging设置和logger解析

Pythonlogging设置和logger解析⼀、logging模块讲解1.函数:logging.basicConfig()参数讲解:(1)level代表⾼于或者等于这个值时,那么我们才会记录这条⽇志(2)filename代表⽇志会写在这个⽂件之中,如果没有这个字段则会显⽰在控制台上(3)format代表我们的⽇志显⽰的格式⾃定义,如果字段为空,那么默认格式为:level:log_name:content import loggingLOG_FORMAT = "%(asctime)s======%(levelname)s++++++(message)"logging.basicConfig(filename="log1.txt",level=logging.WARNING,format=LOG_FORMAT)logging.log(,"This is a INFO log")logging.log(logging.ERROR,"This is a ERROR log.")⼆、logging模块的处理流程1.四⼤组件(1)⽇志器(Logger):产⽣⽇志的⼀个接⼝。

(2)处理器(Handler):把产⽣的⽇志发送到相应的⽬的地。

(3)过滤器(Filter):更精细的控制那些⽇志输出。

(4)格式器(Formatter):对输出的信息进⾏格式化。

2.Logger(1)产⽣⼀个⽇志(2)操作Logger.setLevel() #设置⽇志器将会处理的⽇志消息的最低严重级别Logger.addHandler()Logger.moveHander() #上⾯两个函数,为该logger对象添加和移除⼀个handler对象Logger.addFilter()Logger.removeFilter() #上⾯两个函数,为该logger对象添加和移除⼀个filter对象Logger.debug: #产⽣⼀条debug级别的⽇志,同理,info,error的⽇志消息Logger.exception #创建⼀个类似于Logger.error的⽇志消息Logger.log() #获取⼀个明确的⽇志level参数类型创建⼀个⽇志记录(3)如何得到⼀个logger对象实例化;logging.getLogger()3.Handler(1)把log发送到指定位置(2)⽅法setLevel\setFormat\addFilter\removeFilter(3)不需要直接使⽤,Handler是基类logging.StreamHandler #将⽇志消息发送到输出到Stream。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档