loggingpython3
Ⅰ python 使用logging,生成的log文件是什么编码格式脚本的编码格式决定系统的编码格式决定
log的文件当然是byte格式。或者是无格式的。汉字编码取决于你自己设定的类型。
#coding:utf-8这个东西,只在python2下有效果。还需要编程器配合。你使用python自带的idle当然是没有问题的。
log中的汉字是一定要编码的。不编码你存贮不了。
编辑器本身的缺省编码格式要与你的源代码编码一致,不然看到的就是乱码。如果是idle,它会根据python脚本自动识别。
不过有些编辑器是有些不智能的。它不能理解python脚本第一行的提示。所以有时候,觉着很别扭自己要手工保持编辑器的编码与源码一致。还需要维护那个coding:utf-8
不过python3已将这一句去掉了。源代码全部要求使用utf-8编码(也许是utf-16),我很少用python3
Ⅱ python logging 意图:根据运行的不同时间来创建log文件,而不是固定命名,如:2013-06-13.log
原生loggging类+TimedRotatingFileHandler类实现按dayhoursecond切分
importlogging
fromlogging.
log=logging.getLogger(loggerName)
formatter=logging.Formatter('%(name)-12s%(asctime)slevel-%(levelname)-8sthread-%(thread)-8d%(message)s')#每行日志的前缀设置
fileTimeHandler=TimedRotatingFileHandler(BASIC_LOG_PATH+filename,"S",1,10)
fileTimeHandler.suffix="%Y%m%d.log"#设置切分后日志文件名的时间格式默认filename+"."+suffix如果需要更改需要改logging源码
fileTimeHandler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO)
fileTimeHandler.setFormatter(formatter)
log.addHandler(fileTimeHandler)
try:
log.error(msg)
exceptException,e:
print"writeLogerror"
finally:
log.removeHandler(fileTimeHandler)
值 interval的类型
S 秒
M 分钟
H 小时
D 天
W 周
midnight 在午夜
Ⅲ python中使用logging模块在控制台打印日志的同时也打印log文件,但发现控制台的信息会出现重复打印
loggin模块需要进行很多封装才好用,你这种情况应该是初始化有问题,给你贴一段代码你自己照抄下来用用试试。
#-*-coding:UTF8-*-
#
importos
importlogging
classLogger(object):
'''
@summary:日志处理对象,对logging的封装
'''
def__init__(self,name='Logger'):
self.logger=logging.getLogger(name)
self.init_logger()
definit_logger(self):
self.logger.setLevel(logging.DEBUG)
#屏幕输出日志
stream=logging.StreamHandler()
stream.setLevel(logging.INFO)
#日志样式
fm_stream=logging.Formatter("[ 33[1;%(colorcode)sm%(levelname)s 33[0m%(asctime)s%(myfn)s:%(mylno)d:%(myfunc)s%(mymole)s]%(message)s","%m-%d%H:%M:%S")
stream.setFormatter(fm_stream)
self.logger.addHandler(stream)
defupdate_kwargs(self,kwargs,colorcode):
try:
fn,lno,func=self.logger.findCaller()
fn=os.path.basename(fn)
exceptExceptionasddd:
fn,lno,func="(unknownfile)",0,"(unknownfunction)"
ifnot"extra"inkwargs:
kwargs["extra"]={}
kwargs["extra"]["myfn"]=fn
kwargs["extra"]["mylno"]=lno
kwargs["extra"]["myfunc"]=func
kwargs["extra"]["colorcode"]=colorcode
kwargs["extra"]["mymole"]=""
defdebug(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"0")#原色
self.logger.debug(msg,*args,**kwargs)
definfo(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"32")#绿色
self.logger.info(msg,*args,**kwargs)
defwarning(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"33")#黄色
self.logger.warning(msg,*args,**kwargs)
deferror(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"31")#红色
self.logger.error(msg,*args,**kwargs)
defcritical(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"31")#红色
self.logger.critical(msg,*args,**kwargs)
使用方法:
fromloggerimportLogger
Logger().info('xxxxx')
Logger().warning('xxxxx')
Logger().error('xxxxx')
Ⅳ python程序中logging怎么用
简单将日志打印到屏幕:
[python] view plain
import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
输出:
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
可见,默认情况下Python的
logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级
CRITICAL > ERROR > WARNING > INFO > DEBUG >
NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。
灵活配置日志级别,日志格式,输出位置
[python] view plain
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/test.log',
filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
查看输出:
cat /tmp/test.log
Mon, 05 May 2014 16:29:53 test_logging.py[line:9] DEBUG debug message
Mon, 05 May 2014 16:29:53 test_logging.py[line:10] INFO info message
Mon, 05 May 2014 16:29:53 test_logging.py[line:11] WARNING warning message
Mon, 05 May 2014 16:29:53 test_logging.py[line:12] ERROR error message
Mon, 05 May 2014 16:29:53 test_logging.py[line:13] CRITICAL critical message
可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(mole)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用户输出的消息
Ⅳ python logging 问题
请参考我下面的代码以及对应的 log,看上去没有问题,我怀疑是 log config 的问题
importlogging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s%(filename)s[line:%(lineno)d]%(message)s',
datefmt='%a,%d%b%Y%H:%M:%S',
filename='log.log',
filemode='w')
classA:
def__init__(self):
logging.info('A')
__c=C()
__d=D()
classB:
def__init__(self):
logging.info('B')
classC:
def__init__(self):
logging.info('C')
__e=E()
__f=F()
classD:
def__init__(self):
logging.info('D')
classE:
def__init__(self):
logging.info('E')
classF:
def__init__(self):
logging.info('F')
if__name__=='__main__':
a=A()
b=B()
Ⅵ python logging怎么使用
import logging
然和设置日志的最低警告级别,显示方式,返回句柄
Ⅶ 怎么用logging调试python程序
Logging模块构成
组成
主要分为四个部分:
Loggers:提供应用程序直接使用的接口
Handlers:将Loggers产生的日志传到指定位置
Filters:对输出日志进行过滤
Formatters:控制输出格式
模块使用示例
简单例子
打印输出
In [5]: import logging
In [6]: logging.warning("FBI warning")
WARNING:root:FBI warning
In [7]: logging.info("information")
# 没有打印是因为默认级别是warning
Ⅷ 操作数据库的时候怎么生成日志文件 python3
日志可以用来记录应用程序的状态、错误和信息消息,也经常作为调试程序的工具。它的重要性就不多说了,直接进入正题。
python提供了一个标准的日志接口,就是logging模块。日志级别有DEBUG、INFO、WARNING、ERROR、CRITICAL五种。
首先来看logging简单的使用方法。
这一看到此图中使用了debug()、info()、warning()、error()、critical()五个方法,这五个方法分别用来记录DEBUG、INFO、WARNING、ERROR、CRITICAL级别的日志。但是你会发现debug()和info()方法没有显示任何信息,这是因为默认的日志级别是ERROR ,所以低于此级别的日志不会记录。你还可能会疑惑输出来的日志怎么这样子?别急,往下看,慢慢来解释。
下面我们来看怎么修改一下日志级别。
如图上所示,可以使用basicConfig()方法,修改日志级别,logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL分别代表着那五中日志级别。可以看到图中日志级别设为INFO,那么INFO级别以上的日志都会被记录。
下面再看下怎么修改日志的输出格式。
查看下执行结果:
这个示例内容可能有点多了,没关系,我们一点一点来。
首先程序中:
log_format = '%(filename)s [%(asctime)s] [%(levelname)s] %(message)s'
#这条是定义日志格式的一个变量。显示的条目可以是以下内容:
%(levelname):日志级别的名字格式
%(levelno)s:日志级别的数字表示
%(name)s:日志名字
%(funcName)s:函数名字
%(asctime):日志时间,可以使用datefmt去定义时间格式,如上图。
%(pathname):脚本的绝对路径
%(filename):脚本的名字
%(mole):模块的名字
%(thread):thread id
%(threadName):线程的名字
logging.basicConfig(format=log_format,datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG) #设置日志输出格式和级别。
上面的示例都是将日志输出到屏幕上,能不能写到一个日志文件中呢?答案当然是肯定的,来看:
看下执行结果:
看了吧,日志的设置都是使用basicConfig()方法,需要注意的是,日志写入文件的默认方式是‘a’,也就是追加,如果想覆盖文件,则使用如上图那样,使用filemode='w'。
以上是logging模块最常用的了,基本上就够用了。但是如果你觉得这些还不够的话,看我下一篇博客。会讲Logger、Handler、Formatter对象,logging模块更高级的用法用法。
Ⅸ python如何将logging类作为一个模块给其他模块使用
写个装饰器,里面定义logging的配置
a1 和a2 上面调用装饰器