python 入坑路-logging模块
一、简述
很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误,警告灯信息输出,python的logging模块提供了标准的日志接口,你可以通过它来存储各种格式的日志,logging的日志可以分为,debug,info,warning,error和critical 5个级别, 等级依次递增。。。
二、简单用法
说明:日志级别有五个,分别是:debug,info,warning,error和critical,其中debug级别最低,critical级别最高,
1 import logging 2 3 4 logging.debug("logging debug") 5 6 logging.info("logging info") 7 8 logging.warning("user [niubi] attempted wrong password more than 3 times") 9 10 logging.error("logging error") 11 12 logging.critical("logging critical")
#输出 默认只输出 warning 及以下级别的日志。
WARNING:root:user [niubi] attempted wrong password more than 3 times
ERROR:root:logging error
CRITICAL:root:logging critical
日志输出到文件,执行多次,每次文件增加 append
1 import logging 2 3 4 logging.basicConfig(filename="loggin",level=logging.DEBUG) #filemod="w" 每次覆盖日志,默认“a" ,级别必须大写 5 6 logging.debug("logging debug") 7 8 logging.info("logging info") 9 10 logging.warning("user [niubi] attempted wrong password more than 3 times") 11 12 logging.error("logging error") 13 14 logging.critical("logging critical")
给日志文件添加日期
1 import logging 2 3 4 logging.basicConfig(filename="loggin",filemode="w",level=logging.DEBUG, 5 format="%(asctime)s %(module)s %(levelname)s %(message)s", 6 datefmt="%m-%d-%Y %H:%M:%S %p") 7 8 logging.debug("logging debug") 9 10 logging.info("logging info") 11 12 logging.warning("user [niubi] attempted wrong password more than 3 times") 13 14 logging.error("logging error") 15 16 logging.critical("logging critical")
#输出结果
01-05-2018 14:10:08 PM logging_tf DEBUG logging debug
01-05-2018 14:10:08 PM logging_tf INFO logging info
01-05-2018 14:10:08 PM logging_tf WARNING user [niubi] attempted wrong password more than 3 times
01-05-2018 14:10:08 PM logging_tf ERROR logging error
01-05-2018 14:10:08 PM logging_tf CRITICAL logging critical
关于format 参数
|
%(name)s |
Logger的名字 |
|
%(levelno)s |
数字形式的日志级别 |
|
%(levelname)s |
文本形式的日志级别 |
|
%(pathname)s |
调用日志输出函数的模块的完整路径名,可能没有 |
|
%(filename)s |
调用日志输出函数的模块的文件名 |
|
%(module)s |
调用日志输出函数的模块名 |
|
%(funcName)s |
调用日志输出函数的函数名 |
|
%(lineno)d |
调用日志输出函数的语句所在的代码行 |
|
%(created)f |
当前时间,用UNIX标准的表示时间的浮 点数表示 |
|
%(relativeCreated)d |
输出日志信息时的,自Logger创建以 来的毫秒数 |
|
%(asctime)s |
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 |
|
%(thread)d |
线程ID。可能没有 |
|
%(threadName)s |
线程名。可能没有 |
|
%(process)d |
进程ID。可能没有 |
|
%(message)s |
用户输出的消息 |
三、复杂日志输出
之前的写法感觉要么就输入在屏幕上,要么就是输入在日志里面,那我们有没有既可以输出在日志上,又输出在日志里面呢?很明显,当然可以。下面我们就来讨论一下,如何使用复杂的日志输出。
1、简介
python使用logging模块记录日志涉及的四个主要类:
①logger:提供了应用程序可以直接使用的接口。
②handler:将(logger创建的)日志记录发送到合适的目的输出。
③filter:提供了细度设备来决定输出哪条日志记录。
④formatter:决定日志记录的最终输出格式。
2、logger
①每个程序在输出信息之前都需要获得一个logger。logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的logger:
import logging
#create logging
logger=logging.getLogger()
logger.setLevel(logging.DEBUG)
#创建Handler
ch =logging.StreamHandler()
ch.setLevel(logging.INFO)
#文件handler
fh = logging.FileHandler("info.log",encoding="utf-8")
fh.setLevel(logging.WARNING)
#分别创建输出格式
ch_formatter= logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-"
"%(message)s")
fh_formatter= logging.Formatter("%(asctime)s-%(name)s-%(levelname)s"
"%(message)s")
#引用格式
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)
#添加handler
logger.addHandler(ch)
logger.addHandler(fh)
#app log
logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")

浙公网安备 33010602011771号