python怎么记录日志,python 日志文件

  python怎么记录日志,python 日志文件

  安装:

  pip安装loguru

  使用:

  从loguru导入记录器

  Logger.debug(这是一个调试.)在loguru中只有一个主对象,也就是loguru只有一个logger,而且事先已经配置了一些基本信息,比如友好格式,文本颜色信息等等。

  运行结果:

  可以看到它默认的输出格式是上面的内容,有时间,级别,模块名,行号,日志信息。您不需要手动创建一个记录器,您可以直接使用它。此外,它的输出是彩色的,这使它看起来更友好。

  以上日志信息直接输出到控制台,不输出到其他地方。如果要输出到其他地方,比如保存为文件,我们只需要用一行代码声明即可。

  例如,同时将结果输出到runtime.log文件。你可以这样写:

  从loguru导入记录器

  logger.add(runtime.log )

  logger.debug(这是一个调试.)

  Logger.warning(这是一个调试.)一行add语句。运行后,你会发现控制台刚刚输出的调试信息也会出现在runtime.log目录下。

  2020-05-03 09:26:09.212 DEBUG _ _ main _ _:4-这是一个调试.

  警告 __main__:5 -这是一个调试.

  使用:

  因为是日志,所以最常见的是输出到文件。Loguru对输出到文件的配置有非常强的支持,比如支持输出到多个文件,不同级别的输出,文件太大的时候创建新文件,太久了自动删除等等。

  让我们来看看如何分别实现这些。这里基本上是对add方法使用的介绍。因为这个add方法相当于给logger添加了一个Handler,所以它公开了很多参数来实现Handler的配置。下面详细介绍一下。

  首先看它的方法定义:

  定义添加(

  自我,

  水槽,

  *,

  级别=_默认值。LOGURU_LEVEL,

  format=_默认值。LOGURU_FORMAT,

  过滤器=_默认值。LOGURU_FILTER,

  colorize=_默认值。着色,

  serialize=_默认值。LOGURU_SERIALIZE,

  回溯=_默认值。LOGURU_BACKTRACE,

  诊断=_默认值。LOGURU_DIAGNOSE,

  queue=_defaults。LOGURU_ENQUEUE,

  catch=_defaultsLOGURU_CATCH,

  * *克瓦查

  )看它的源代码。它支持如此多的参数,如级别,格式,过滤器,颜色等。此外,我们还注意到它有一个非常重要的参数sink。我们来看一下官方文档:sink,可以知道我们可以通过sink传入多种不同的数据结构。摘要如下:

  接收器可以传入一个文件对象,如sys.stderr或open(file.log , w )。接收器可以直接传入str字符串或pathlib。Path对象,它实际上表示文件路径。如果识别为这种类型,它会自动创建相应路径的日志文件并输出日志。Sink可以是一个可以定义自己的输出实现的方法。接收器可以是日志模块的处理程序,如FileHandler、StreamHandler等。或者上面提到的CMRESHandler也是可以的,这样就可以实现自定义处理程序的配置。Sink也可以是自定义类,具体实现规范可以在官方文档中找到。

  另外,加了水槽后,我们还可以删除,相当于刷新,写新内容。

  删除时,根据add方法刚刚返回的id删除。请参见以下示例:

  从loguru导入记录器

  trace=logger.add(runtime.log )

  logger.debug(这是一条调试消息)

  logger.remove(跟踪)

  Logger.debug(这是另一个调试消息)看这里。我们首先添加一个sink,然后获取它的返回值并将其指定为trace。然后输出一个日志,再把trace变量传递给remove方法,再输出一个日志看看结果是什么。

  最终结果:

  控制台输出如下:

  2020-05-03 09:55:11.005 DEBUG _ _ main _ _:4-这是一条调试消息

  这是另一条调试消息

  日志文件runtime.log包含以下内容:

  020-05-03 09:55:11.005 debug _ _ main _ _:4-这是一条调试消息。可以发现,调用remove方法后,历史日志确实被删除了。

  这样,我们可以刷新和重写日志。

  旋转配置使用loguru。我们也可以非常方便地使用旋转配置。例如,如果我们想每天输出一个日志文件,或者文件太大,我们可以自动分离日志文件。我们可以直接用add方法的rotation参数来配置。

  让我们看看下面的例子:

  Logger.add (runtime _ {time})。log ,rotation= 500MB )使用这个配置,我们可以每500MB存储一个文件,如果每个日志文件太大,将会创建一个新的日志文件。当我们配置日志名称时,我们添加了一个时间占位符,以便在生成过程中可以自动替换时间,并且可以生成一个文件名包含时间的日志文件。

  此外,我们还可以使用rotation参数定期创建日志文件,例如:

  Logger.add (runtime _ {time})。log ,rotation= 00: 00 ),以便您可以在每天0: 00创建新的日志文件输出。

  此外,我们还可以配置日志文件的周期时间,例如每隔一周创建一个日志文件,编写如下:

  Logger.add (runtime _ {time})。log ,rotation= 1week ),这样我们可以在一周内创建一个日志文件。

  保留配置很多情况下,一些很老的日志对我们来说是没用的。白白占用了一些存储空间,如果不清除会非常浪费。Retention此参数可以配置日志的最长保留时间。

  例如,如果我们想将日志文件的最大保留时间设置为10天,我们可以这样配置它:

  Logger.add (runtime.log ,retention= 10days )压缩配置loguru还可以配置文件的压缩格式,比如保存为zip文件格式,例如如下:

  Logger.add (runtime.log ,compression= zip )可以是以下格式: gz , bz2 , xz , lzma , tar , tar.gz , tar.bz2 ,

   tar.xz , zip

  入队配置loguru可以配置成在多个进程同时向日志文件写入日志时,使用queue来达到异步的效果。

  Logger.add (somefile.log ,enqueue=true)# Asynchronous write要记录的消息在到达接收方之前是否应首先通过多进程安全队列。这在通过多个进程记录文件时非常有用。

  Format string loguru在输出日志时也提供了非常友好的字符串格式化功能,像这样:

  logger.info(如果你用的是Python {},当然更喜欢{feature}!,3.6,feature=f字符串)

  输出:

  2020-05-03 10:24:34.200 INFO _ _ main _ _:3-如果你用的是Python 3.6,当然首选f-strings!

  Traceback记录很多情况下,如果我们遇到运行错误,在打印输出日志时不小心没有配置好Traceback的输出,很有可能是追踪不到错误。

  但是,在使用loguru之后,我们可以通过使用它提供的装饰器来直接记录Traceback,可以使用这样的配置:

  @logger.catch

  def my_function(x,y,z):

  #一个错误?反正是被抓了!

  返回1/(x y z)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: