python日志

import logging
import random
# 基本配置 每个程序只能配置一次   运行时不可更改
# 指定方式:文件/网络。。。和日志格式
logging.basicConfig(
    filename="log/demo.log",
    level=logging.DEBUG,
    format="%(asctime)s|%(levelname)s|%(message)s"
)
try:
    for i in range(10):
        k = random.randint(0,100)
        print(k)
        logging.debug("生成了随机数:%d"%k)
except TypeError as e:
    logging.error("程序发生异常")

# python  日志
日志是一个可以追踪某些软件运行时的所发生事件的方法 
    1.日志的作用 
    通过log的分析,可以方便用户了解系统或软件、应用的运行情况
如果应用的log足够丰富,也可以分析以往用户的操作行为、类型喜好
还可以发现软件的问题,解除BUG。
    日志的特点:
        程序调试
        了解软件程序运行情况,是否正常
        软件程序故障分析和问题定位
    2.日志的等级
    不同的应用程序所定义的日志等级可能会有所差别,有如下等级:
DEBUG      debug       调试     最详细的日志信息,典型应用场景是 问题诊断
INFO       info        信息     信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
NOTICE     notice      请注意
WARNING    warning     警告      当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR      error       错误      由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL   critical    至关重要的 当发生严重错误,导致应用程序不能继续运行时记录的信息
ALERT      alert       警报
EMERGEMCY  emergemcy   紧急
    3.日志字段信息与日志格式
    事件发生时间
    事件发生位置
    事件的严重程度-日志级别
    事件内容

logging模块定义的模块级别的常用的函数    

函数                                     说明
logging.debug(msg, *args, **kwargs)        创建一条严重级别为DEBUG的日志记录
logging.info(msg, *args, **kwargs)        创建一条严重级别为INFO的日志记录
logging.warning(msg, *args, **kwargs)    创建一条严重级别为WARNING的日志记录
logging.error(msg, *args, **kwargs)        创建一条严重级别为ERROR的日志记录
logging.critical(msg, *args, **kwargs)    创建一条严重级别为CRITICAL的日志记录
logging.log(level, *args, **kwargs)        创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs)            对root logger进行一次性配置

logging模块的四大组件

组件        说明
loggers        提供应用程序代码直接使用的接口
handlers    用于将日志记录发送到指定的目的位置
filters        提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
formatters    用于控制日志信息的最终输出格式

例一:
    import logging
    logging.debug("This is a debug log.")
    logging.info("This is a info log.")
    logging.warning("This is a warning log.")
    logging.error("This is a error log.")
    logging.critical("This is a critical log.")
    也可以这样写:
    logging.log(logging.DEBUG, "This is a debug log.")
    logging.log(logging.INFO, "This is a info log.")
    logging.log(logging.WARNING, "This is a warning log.")
    logging.log(logging.ERROR, "This is a error log.")
    logging.log(logging.CRITICAL, "This is a critical log.")
    输出结果:
    WARNING:root:This is a warning log.
    ERROR:root:This is a error log.
    CRITICAL:root:This is a critical log.
    
问题1:为什么前面两条日志没有被打印出来?
    这是因为logging模块提供的日志记录函数所使用的日志器设置的日志级别是WARNING,因此只有WARNING级别的日志记录以及大于它的ERROR和CRITICAL级别的日志记录被输出了,而小于它的DEBUG和INFO级别的日志记录被丢弃了。

问题2:打印出来的日志信息中各字段表示什么意思?为什么会这样输出?
    上面输出结果中每行日志记录的各个字段含义分别是:
    日志级别:日志器名称:日志内容
之所以会这样输出,是因为logging模块提供的日志记录函数所使用的日志器设置的日志格式默认是BASIC_FORMAT,其值为:

"%(levelname)s:%(name)s:%(message)s"
    3. logging.basicConfig()函数说明
    方法用于为logging日志系统做一些基本配置,方法定义如下:

logging.basicConfig(**kwargs)
该函数可接收的关键字参数如下:

参数名称    描述
filename    指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了
filemode    指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效
format        指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。
datefmt        指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
level        指定日志器的日志级别
stream        指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,
            否则会引发 ValueError异常
style        Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'
handlers    Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,
            这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,
            不能同时出现2个或3个,否则会引发ValueError异常。

    4. logging模块定义的格式字符串字段
我们来列举一下logging模块中定义好的可以用于format格式字符串中字段有哪些:

字段/属性名称        使用格式            描述
asctime                %(asctime)s            日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
created                %(created)f            日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
relativeCreated        %(relativeCreated)d    日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
msecs                %(msecs)d            日志事件发生事件的毫秒部分
levelname            %(levelname)s        该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno                %(levelno)s            该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name                %(name)s            所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
message                %(message)s            日志记录的文本内容,通过 msg % args计算得到的
pathname            %(pathname)s        调用日志记录函数的源码文件的全路径
filename            %(filename)s        pathname的文件名部分,包含文件后缀
module                %(module)s            filename的名称部分,不包含后缀
lineno                %(lineno)d            调用日志记录函数的源代码所在的行号
funcName            %(funcName)s        调用日志记录函数的函数名
process                %(process)d            进程ID
processName            %(processName)s        进程名称,Python 3.1新增
thread                %(thread)d            线程ID
threadName            %(thread)s            线程名称    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值