1.basicConfig方式
import logging
log_format='%(asctime)s %(name)s %(module)s %(created)s %(message)s'
datefmt='%Y-%m-%d %H:%M:%S %a'
logging.basicConfig(
filename='log_module/test.log',
format=log_format,
datefmt=datefmt,
level=logging.DEBUG
logging.info('dsds')
2.logger日志组件
import logging
def log_operate():
loger=logging.getLogger('self')
fmt=logging.Formatter(
fmt='%(asctime)s %(name)s %(module)s %(created)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %a'
)
loger.setLevel(logging.DEBUG)
file_handle=logging.FileHandler(filename='log_module/test.log',encoding='utf-8')
file_handle.setFormatter(fmt)
loger.addHandler(file_handle)
return loger
log=log_operate()
log.info('ddd')
3.fileconfig
[loggers]
keys=root,lg1
[handlers]
keys=file_handler
[formatters]
keys=fm1
[logger_root]
level=DEBUG
handlers=file_handler
[logger_lg1]
level=INFO
handlers=file_handler
propagate=1
qualname=lg1_self
[handler_file_handler]
class=FileHandler
formatter=fm1
args=('log_module/test.log','a')
[formatter_fm1]
format=%(asctime)s %(name)s %(module)s %(created)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S %a
import logging
import logging.config
logging.config.fileConfig('log_module/log.conf')
loger=logging.getLogger('lg1')
loger.info('filelog_conf')
root=logging.getLogger()
root.info(2111)
4.dictconfig
import logging.config
config = {
'version': 1,
'formatters': {
'simple': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'simple'
},
'file': {
'class': 'logging.FileHandler',
'filename': 'log_module/test.log',
'level': 'DEBUG',
'formatter': 'simple'
},
},
'loggers':{
'StreamLogger': {
'handlers': ['console'],
'level': 'DEBUG',
},
'FileLogger': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
},
}
}
logging.config.dictConfig(config)
StreamLogger = logging.getLogger("StreamLogger")
FileLogger = logging.getLogger("FileLogger")
StreamLogger.info('qwqw')
FileLogger.info('xxxx')
5.Format参数
| 变量 |
格式 |
变量描述 |
| asctime |
%(asctime)s |
将日志的时间构造成可读的形式,默认情况下是精确到毫秒,如 2018-10-13 23:24:57,832,可以额外指定 datefmt 参数来指定该变量的格式 |
| name |
%(name) |
日志对象的名称 |
| filename |
%(filename)s |
不包含路径的文件名 |
| pathname |
%(pathname)s |
包含路径的文件名 |
| funcName |
%(funcName)s |
日志记录所在的函数名 |
| levelname |
%(levelname)s |
日志的级别名称 |
| message |
%(message)s |
具体的日志信息 |
| lineno |
%(lineno)d |
日志记录所在的行号 |
| pathname |
%(pathname)s |
完整路径 |
| process |
%(process)d |
当前进程ID |
| processName |
%(processName)s |
当前进程名称 |
| thread |
%(thread)d |
当前线程ID |
| threadName |
%threadName)s |
当前线程名称 |
6.日期时间格式化符号
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身