首页 > 编程知识 正文

python日志配置文件的例子(python的日志模块)

时间:2023-12-15 08:46:17 阅读:316058 作者:JBIY

本文目录一览:

python logging.conf是什么类型文件

下面的函数用于配置logging模块,它们位于logging.config模块中。你可以使用这些函数来配置,也可以在logging或是logging.handlers中声明它们来配置。

logging.config.dictConfig(config)

从dictionary中获取logging配置

logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)

从指定的fname的配置文件中读取logging配置文件

该函数可以在应用程序中多次调用

logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)

在指定端口启动socket server并侦听新配置

logging.config.stopListening()

关闭先前正在侦听的server

Configuration file format

被fileConfiguration()所理解的配置文件格式基于configparser功能。配置文件必须包含[loggers], [handlers]和[formatters],它们分别代表日志文件中定义的每种类型的实体。对这3种实体,后面有一个单独的section来定义该实体如何配置。

因此,[loggers]节中名为log01的logger,相关的配置文件细节在[logger_log01]节中定义。类似地,[handlers]节中名为

hand01的handler将在[handler_hand01]节中声明,[formatters]节中的form01将在[formatter_form01]声明。root logger配置必须在[logger_root]节声明。

注意:fileConfig() API比dictConfig()旧,并不包含logging某些方面的功能。建议以后尽量使用dictConfig API。

配置文件的例子如下:

[loggers]

keys=root,log02,log03,log04,log05,log06,log07

[handlers]

keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

[formatters]

keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

root logger必须指定一个级别和handlers列表。示例如下:

[logger_root]

level=NOTSET

handlers=hand01

其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,仅对root logger来说,NOTSET意味着所有的log message

都会记录。对非root的logger,强制要求一些额外信息,比如

[logger_parser]

level=DEBUG

handlers=hand01

propagate=1

qualname=compiler.parser

当一个非root的logger中level被配置为NOSET,它将通过上一级的logger来确定当前logger的有效级别。propagete为1表示message必须传播到上一级logger中,为0表示不传。qualname表示该logger的层级channel名称,这就是说,应用程序使用该名称可以得到该logger对象。

handler类型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等

handler节对应的配置示例如下:

[handler_hand01]

class=StreamHandler

level=NOTSET

formatter=form01

args=(sys.stdout,)

class表示该handler在logging包命名空间中的类名,level表示logger的级别,NONSET表示要记录所有日志。

formatter表示该handler的formatter的键名,假如空白的话,就使用默认值logging._defaultFormatter。假如formatter指定了该名字,必须在对应的section声明。args字段是handler类的构造函数的变量列表,参考相关handler构造函数,或者下面的例子,去观察通常的元素是如何构造的。比如:

[handler_hand02]

class=FileHandler

level=DEBUG

formatter=form02

args=('python.log', 'w')

下面是formatter的配置

[formatter_form01]

format=F1 %(asctime)s %(levelname)s %(message)s

datefmt=

class=logging.Formatter

format字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,为空时使用默认的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的类名,

日志级别如下:

Level Numeric value

CRITICAL 50

ERROR 40

WARNING 30

INFO 20

DEBUG 10

NOTSET 0

logging.handlers解读

logging模块中定义了这3个handler:StreamHandler, FileHandler and NullHandler

其它的handler都在logging.handler中定义,一并说明如下:

StreamHandler

该类位于logging包,将logging output输出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的类文件对象

class logging.StreamHandler(stream=None)

假如指定了stream名称,日志将输出到流实例中,否则,日志输出到sys.stderr

FileHandler

该类位于logging包,将logging output输出到磁盘文件中,文件默认无限增长

class logging.FileHandler(filename, mode='a', encoding=None, delay=False)

打开指定的文件并记录日志,假如mode没有设置,默认使用'a'表示追加日志到文件中。

NullHandler

该对象什么也不处理

WatchedFileHandler

一个FileHandler实例,监视日志文件的变化,假如文件变化了,它会关闭并重新打开,不建议在Windows下使用

文件的变化可以发生,当应用程序使用newsyslog和logrotate来实现日志文件的回滚时。这个handle是在Unix/Linux下面,监视文件是否改变。(一个文件认为改变了,假如它的device厚实inode已经改变),将旧的文件关闭,这个流打开。

class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])

指定的文件被打开,用来记录日志,假如mode未指示,默认使用a

RotatingFileHandler

支持磁盘文件的回滚

class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)

你可以使用 maxBytes和backupCount值去让日志文件在预设大小时回滚。只要日志文件在长度上接近maxBytes时,就会关闭旧日志文件,打开一个新的日志文件,实现回滚。假如maxBytes或backupCount为0,回滚不会发生。假如backupCount非零,系统会备份旧文件,文件名后加‘.1’, ‘.2’ 。比如,日志文件名为app.log,backupCount为5,将会得到app.log, app.log.1, app.log.2, 直到app.log.5这6个文件。写入日志的文件总是app.log,当这个文件填满时,就关闭它并重命名为app.log.1, 假如还存在app.log.1, app.log.2等文件,就逐一改名为app.log.2, app.log.3等等。

TimedRotatingFileHandler

支持在指定时间段内回滚日志

class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)

回滚基于when和interval设置,when指定interval的类型,参见下表,大小写不敏感,默认按小时回滚

Value Type of interval

'S' Seconds

'M' Minutes

'H' Hours

'D' Days

'W0'-'W6' Weekday (0=Monday)

'midnight' Roll over at midnight

回滚扩展名使用strftime format %Y-%m-%d_%H-%M-%S或其头部子字符串,当使用基于weekday的回滚时,W0表示周一,……,W6表示周日,interval的值不会用到

backupCount表示备份数,当日志很多时,新日志会覆盖旧日志,删除逻辑使用interval值去决定删除哪些日志文件

utc为true,表示使用UTC时间,否则使用本地时间

SocketHandler

通过网络套接字输出日志,SocketHandler类的基类使用TCP socket

class logging.handlers.SocketHandler(host, port)

向指定地址和端口的远程主机发送日志

DatagramHandler

继承自基类SocketHandler类,使用UDP socket发送日志message

class logging.handlers.DatagramHandler(host, port)

SysLogHandler

发送日志到远程或是本地unix syslog

class logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)

NTEventLogHandler

发送日志消息到本地Windows NT, Windows 2000 or Windows XP event log

class logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')

SMTPHandler

通过SMTP将日志消息发送到email address

MemoryHandler

支持将日志message缓存到内存中,周期性刷新日志到target handler

class logging.handlers.BufferingHandler(capacity)

class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)

HTTPHandler

使用GET或是POST,将日志message发送到web server

class logging.handlers.HTTPHandler(host, url, method='GET')

操作数据库的时候怎么生成日志文件 python3

日志可以用来记录应用程序的状态、错误和信息消息,也经常作为调试程序的工具。它的重要性就不多说了,直接进入正题。

python提供了一个标准的日志接口,就是logging模块。日志级别有DEBUG、INFO、WARNING、ERROR、CRITICAL五种。

首先来看logging简单的使用方法。

这一看到此图中使用了debug()、info()、warning()、error()、critical()五个方法,这五个方法分别用来记录DEBUG、INFO、WARNING、ERROR、CRITICAL级别的日志。但是你会发现debug()和info()方法没有显示任何信息,这是因为默认的日志级别是ERROR ,所以低于此级别的日志不会记录。你还可能会疑惑输出来的日志怎么这样子?别急,往下看,慢慢来解释。

下面我们来看怎么修改一下日志级别。

如图上所示,可以使用basicConfig()方法,修改日志级别,logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL分别代表着那五中日志级别。可以看到图中日志级别设为INFO,那么INFO级别以上的日志都会被记录。

下面再看下怎么修改日志的输出格式。

查看下执行结果:

这个示例内容可能有点多了,没关系,我们一点一点来。

首先程序中:

log_format = '%(filename)s [%(asctime)s] [%(levelname)s] %(message)s'

#这条是定义日志格式的一个变量。显示的条目可以是以下内容:

%(levelname):日志级别的名字格式

%(levelno)s:日志级别的数字表示

%(name)s:日志名字

%(funcName)s:函数名字

%(asctime):日志时间,可以使用datefmt去定义时间格式,如上图。

%(pathname):脚本的绝对路径

%(filename):脚本的名字

%(module):模块的名字

%(thread):thread id

%(threadName):线程的名字

logging.basicConfig(format=log_format,datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG) #设置日志输出格式和级别。

上面的示例都是将日志输出到屏幕上,能不能写到一个日志文件中呢?答案当然是肯定的,来看:

看下执行结果:

看了吧,日志的设置都是使用basicConfig()方法,需要注意的是,日志写入文件的默认方式是‘a’,也就是追加,如果想覆盖文件,则使用如上图那样,使用filemode='w'。

以上是logging模块最常用的了,基本上就够用了。但是如果你觉得这些还不够的话,看我下一篇博客。会讲Logger、Handler、Formatter对象,logging模块更高级的用法用法。

python日志模块记录三_日志命名_日志轮转

在日志记录中,我们往往要能看到是什么哪里出错了。可以通过日志名字记录哪里出错了。而日志也需要轮转,一个日志文件不能无限大,也需要备份。所以有了通过日志名的灵活配置,和通过设置handler文件输出调用 logging.handlers.RotatingFileHandler 方法来实现轮转和备份。

my_logging文件如下配置

python中四种配置文件

常用的配置文件后缀是.ini、.conf、.py,当然还有使用.json、.txt的,推荐使用常用的.ini、.py,配置文件的名字一般是config便于理解和使用。

ini配置文件,这类配置文件我们使用内置configparser库来使用,它可以实现配置文件的写入、更新、删除、读取等操作非常方便,建议使用这种方式。

新建一个config.ini的配置文件内容如下,编码格式要是 utf-8 以免出错。:

其中[]中的是section节点,该节点下的等式是option即键=值

然后每一行写一个option ,每个选项就是一个option。直接写名字,后面加 " = " 再加上它的值就行,字符串的表示不要加引号,否则引号也会被解析出来。

可以在配置文件中加入注释 ,但是注释必须是单独的一行,且以 “#” 开头。只是每次运行时不会读入注释,只要运行一次,写入文件后,所有的注释都会消失。

config.json文件

使用python内置的 json 标准库进行解析ini文件。

load() 从json文件中读取json格式数据

loads() 将字符串类型数据转化为json格式数据

dump() 将json格式数据保存到文件

dumps() 将json格式数据保存为字符串类型

TOML的语法广泛地由key = "value"、[节名]、#注释构成。

支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。

config.toml文件

使用外部库 toml 解析toml文件。

安装:pip install toml

读取文件

安装:

YAML是目前最推荐的配置文件格式。优秀的配置文件标准它几乎都有:

容易阅读和修改,支持注释。

支持丰富的数据类型。

不同格式的明确表达。

yaml使用时需要注意:

yaml强制缩进。虽然不规定具体缩进几个空格,但是同一级的内容要保持相同的缩进。

冒号后面一定要加空格, 否则无法解析。

python解析 yaml 可以使用pyyaml库,操作和标准的文件操作非常类似:

得到的data就是解析后的数据,在python当中,它是一个嵌套的字典:

想获取某一项配置,再通过字典的操作获取:

config.yaml文件

读取

Python日志—Python日志模块logging介绍

从事与软件相关工作的人,应该都听过“日志”一词。

日志就是跟踪软件运行时事件的方法,为了能够在程序运行过程中记录错误。

通过日志记录程序的运行,方便我们查询信息,以便追踪问题、进行维护和调试、还是数据分析。

并且各编程语言都形成了各自的日志体系和相应的框架。

日志的作用总结:

首先我们要树立一个观点,那就是“不是为了记录日志而记录日志,日志也不是随意记的”。要实现能够只通过日志文件还原整个程序执行的过程,达到能透明地看到程序里执行情况,每个线程每个过程到底执行结果的目的。日志就像飞机的黑匣子一样,应当能够复原异常的整个现场乃至细节。

在项目中,日志这个功能非常重要,我们要重视起来。

在Python中,使用logging模块来进行日志的处理。

logging是Python的内置模块,主要用于将日志信息进行格式化内容输出,可将格式化内容输出到文件,也可输出到屏幕。

我们在开发过程中,常用print()函数来进行调试,但是在实际应用的部署时,我们要将日志信息输出到文件中,方便后续查找以及备份。

在我们使用日志管理时,我们也可以将日志格式化成Json对象转存到ELK中方便图形化查看及管理。

logging模块将日志系统从高向低依次定义了四个类,分别是logger(日志器)、handler(处理器)、filter(过滤器)和formatter(格式器)。其中由日志器生成的实例将接管原本日志记录函数logging.log的功能。

说明:

我们先来思考下下面的两个问题:

在软件开发阶段或部署开发环境时,为了尽可能详细的查看应用程序的运行状态来保证上线后的稳定性,我们可能需要把该应用程序所有的运行日志全部记录下来进行分析,这是非常耗费机器性能的。

当应用程序正式发布或在生产环境部署应用程序时,我们通常只需要记录应用程序的异常信息、错误信息等,这样既可以减小服务器的I/O压力,也可以避免我们在排查故障时被淹没在日志的海洋里。

那么怎样才能在不改动应用程序代码的情况下,根据事件的重要性或者称之为等级,实现在不同的环境中,记录不同详细程度的日志呢?

这就是日志等级的作用了,我们通过配置文件指定我们需要的日志等级就可以了。

说明:

总结:

开发应用程序时或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息,可以方便进行开发或部署调试。 应用上线或部署生产环境时,应用使用WARNING或ERROR或CRITICAL级别的日志,来降低机器的I/O压力和提高获取错误日志信息的效率。 日志级别的指定通常都是在应用程序的配置文件中进行指定的。 不同的应用程序所定义的日志等级会有所差别,根据实际需求来决定。

python之配置日志的几种方式

1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;

2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容;

3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。