Python3 日志输出及配置

本文详细介绍了Python中使用logging模块进行日志配置的方法,包括不同级别的日志输出、日志格式设置、日志文件的管理和按时间切割日志的策略。通过具体的代码示例和配置文件解析,读者可以了解到如何在实际项目中有效利用日志系统。

Python3 日志输出及配置

目录结构如下:

.
├── conf
│   ├── development.conf
│   ├── logging.conf
│   ├── production.conf
│   └── testing.conf
├── data
├── logs
│   ├── root.log
│   └── webben.log
└── src
    ├── cli.py
    ├── log.py
    ├── trans_master.py
    ├── trans_worker.py
    └── utils.py

log.py 文件

#!/usr/bin/python

import logging,logging.config;

logging.config.fileConfig('conf/logging.conf');

if __name__ == '__main__':
    logger = logging.getLogger('webben.user');                                           
    logger.debug('Hello Debug Webben');
    logger.info('Hello Info Webben');
    logger.error('Hello Error Webben');

logging.conf 配置文件

[loggers]
keys=root,webben

[handlers]
keys=root,webben

[formatters]
keys=rootFmt,webbenFmt


[logger_root]
level=NOTSET
handlers=root
propagate=1
qualname=compiler.parser

[handler_root]
class=FileHandler
level=DEBUG
formatter=rootFmt
args=('logs/root.log','a+')

[formatter_rootFmt]
format= %(levelname)s %(threadName)s %(asctime)s:   %(message)s
datefmt=%H:%M:%S


[logger_log]
level=DEBUG
handlers=webben
propagate=1
qualname=compiler.parser

[logger_webben]
level=DEBUG
handlers=webben
propagate=0
qualname=webben

[handler_webben]
class=FileHandler
level=DEBUG
formatter=webbenFmt
args=('logs/webben.log','a+')

[formatter_webbenFmt]
format=%(asctime)s - %(process)d - %(levelname)s - %(name)s - %(message)s
datefmt=

按时间切割日志

[loggers]
keys=root,qianqian

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=ERROR
handlers=consoleHandler,fileHandler
propagate=0
qualname=

[logger_qianqian]
level=DEBUG
handlers=consoleHandler,fileHandler
propagate=1
qualname=

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=logging.handlers.TimedRotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('../logs/qianqian.log','midnight')

[formatter_simpleFormatter]
format=%(asctime)s - %(process)d - %(levelname)s - %(name)s - %(message)s
datefmt=


关于 formatter 的配置,采用的是%(<dict key>)s的形式,就是字典的关键字替换。提供的关键字包括:

格式说明
%(name)s日志记录器(日志通道)的名称。
%(levelno)s消息的数字日志级别(DEBUG, INFO, WARNING, ERROR, CRITICAL)。
%(levelname)s消息的文本日志级别 (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)。
%(pathname)s发出日志调用的源文件的完整路径名 (if available)
%(filename)s路径名的文件名部分。
%(module)s模块(文件名的一部分)。
%(funcName)s包含日志调用的函数的名称。
%(lineno)d发出日志调用的源代码行号(如果可用)
%(created)f创建LogRecord的时间 (as returned by time.time()).
%(relativeCreated)d创建LogRecord的时间(以毫秒为单位),相对于加载日志模块的时间。
%(asctime)s创建LogRecord的人类可读时间。默认情况下,
这是“2003-07-08 16:49:45,896”(逗号后面的数字是毫秒部分)。
%(msecs)d创建LogRecord的毫秒部分。
%(thread)d线程ID(如果可用)。
%(threadName)s线程名(如果可用)。
%(process)d进程ID(如果可用)。
%(message)s日志消息,计算为msg % args。

关于 Handler 配置说明

[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form02
args=('python.log', 'w')

[handler_hand03]
class=handlers.SocketHandler
level=INFO
formatter=form03
args=('localhost', handlers.DEFAULT_TCP_LOGGING_PORT)

[handler_hand04]
class=handlers.DatagramHandler
level=WARN
formatter=form04
args=('localhost', handlers.DEFAULT_UDP_LOGGING_PORT)

[handler_hand05]
class=handlers.SysLogHandler
level=ERROR
formatter=form05
args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)

[handler_hand06]
class=handlers.NTEventLogHandler
level=CRITICAL
formatter=form06
args=('Python Application', '', 'Application')

[handler_hand07]
class=handlers.SMTPHandler
level=WARN
formatter=form07
args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
kwargs={'timeout': 10.0}

[handler_hand08]
class=handlers.MemoryHandler
level=NOTSET
formatter=form08
target=
args=(10, ERROR)

[handler_hand09]
class=handlers.HTTPHandler
level=NOTSET
formatter=form09
args=('localhost:9022', '/log', 'GET')
kwargs={'secure': True}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值