python输出日志
① 我如何着色python日志输出
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用\033来完成 !
② python写日志需要输出什么信息
记录某个时间点发生了什么事情,错误信息、警告信息、提示信息、调试信息等
③ python打印日志,extra是什么意思
extra是用户自定义的dict. 这些key/value在格式化的时候可以直接引用。
extra可以用来传递额外的日志信息,尤其是上下文信息。
例如:
FORMAT='%(asctime)-15s%(clientip)s%(user)-8s%(message)s'
logging.basicConfig(format=FORMAT)
d={'clientip':'192.168.0.1','user':'fbloggs'}
logger=logging.getLogger('tcpserver')
logger.warning('Protocolproblem:%s','connectionreset',extra=d)
这里除了protocol错误描述外,还附加了客户IP和用户名信息。
如果配置了一些非文本格式的handler,结构化的数据会更容易存储和查询。
例如,Sentry的logging handler允许用户用extra.data来传递任意信息,并自动记录到web界面。
logger.error('Therewassomecrazyerror',exc_info=True,extra={
'culprit':'my.view.name',
'fingerprint':[...],
'data':{
#
'username':request.user.username,
}
})
④ 请教python 如何分日志级别分文件输出
利用sys.stdout将print行导向到你定义的日志文件中,例如:
import sys
# make a of original stdout route
stdout_backup = sys.stdout
# define the log file that receives your log info
log_file = open("message.log", "w")
# redirect print output to log file
sys.stdout = log_file
print "Now all print info will be written to message.log"
# any command line that you will execute
log_file.close()
# restore the output to initial pattern
sys.stdout = stdout_backup
print "Now this will be presented on screen"
⑤ python怎么实现远程动态输出日志
#!/usr/bin/python
#encoding=utf-8
#Filename:monitorLog.py
importos
importsignal
importsubprocess
importtime
logFile1="test1.log"
logFile2='test2.log'
#日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件
#程序只是简单的示例一下,监控test1.log10秒,转向监控test2.log
defmonitorLog(logFile):
print'监控的日志文件是%s'%logFile
#程序运行10秒,监控另一个日志
stoptime=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()+10))
popen=subprocess.Popen('tail-f'+logFile,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
pid=popen.pid
print('Popen.pid:'+str(pid))
whileTrue:
line=popen.stdout.readline().strip()
#判断内容是否为空
ifline:
print(line)
#当前时间
thistime=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))
ifthistime>=stoptime:
#终止子进程
popen.kill()
print'杀死subprocess'
break
time.sleep(2)
monitorLog(logFile2)
if__name__=='__main__':
monitorLog(logFile1)
⑥ python logging日志打印疑问
用法错误了,正确的用法是
import logging
logger = logging.getLogger( )
handler = logging.FileHandler( 'log.log' )
handler.setFormatter( logging.Formatter( '%(asctime)s %(levelname)s %(message)s' ) )
logger.addHandler( handler )
logger.setLevel( logging.DEBUG )
if __name__ == '__main__':
for data in [ '1' ,'2' ,'3' ]:
logger.debug( data )
你上面的输出并不是logging的输出,而是显式调用writeLog的输出,而且每调用一次writeLog,就在writeLog里调用一次addHandler增加一个handle,那么下次调用时又会多调用一次,这就是为什么1输出了一次,2输出了两次.......
⑦ 如何使用批处理执行python脚本,并把python脚本的控制台日志输出到一个log文件中
1, 用绝对路径试试:D:\logs\log.txt;
2, 最后的exit去掉试试,反正最后一行执行完也会自然退出。
3, 另写一个简单的python测试脚本,里面只有一行 print 'Hello World', 然后用上述批处理执行一下看看log对不对。
⑧ 操作数据库的时候怎么生成日志文件 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函数调用详细日志
1, 用绝对路径试试:D:\logs\log.txt; 2, 最后的exit去掉试试,反正最后一行执行完也会自然退