如何把数据写入日志里(python)

如何把数据写入日志里(python),第1张

#coding=utf-8

def

initlog():

import

logging

#

生成一个日志对象

logger

=

logging.getLogger()

#

生成一个Handler。logging支持许多Handler,

#

象FileHandler,

SocketHandler,

SMTPHandler等,我由于要写

#

文件就使用了FileHandler。

#

logfile是一个全局变量,它就是一个文件名,如:'crawl.log'

logfile

=

'test.log'

hdlr

=

logging.FileHandler(logfile)

#

成一个格式器,用于规范日志的输出格式。如果没有这行代码,那么缺省的

#

格式就是:"%(message)s"。也就是写日志时,信息是什么日志中就是什么,

#

没有日期,没有信息级别等信息。logging支持许多种替换值,详细请看

#

Formatter的文档说明。这里有三项:时间,信息级别,日志信息

formatter

=

logging.Formatter('%(asctime)s

%(levelname)s

%(message)s')

#

将格式器设置到处理器上

hdlr.setFormatter(formatter)

#

将处理器加到日志对象上

logger.addHandler(hdlr)

#

设置日志信息输出的级别。logging提供多种级别的日志信息,如:NOTSET,

#

DEBUG,

INFO,

WARNING,

ERROR,

CRITICAL等。每个级别都对应一个数值。

#

如果不执行此句,缺省为30(WARNING)。可以执行:logging.getLevelName

#

(logger.getEffectiveLevel())来查看缺省的日志级别。日志对象对于不同

#

的级别信息提供不同的函数进行输出,如:info(),

error(),

debug()等。当

#

写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定

#

要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息

logger.setLevel(logging.NOTSET)

return

logger

logging=initlog()

logging.info(u'注册')

日志的记录

Python有一个logging模块,可以用来产生日志。

(1)学习资料

http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html

http://blog.donews.com/limodou/archive/2005/02/16/278699.aspx

http://kenby.iteye.com/blog/1162698

http://blog.csdn.NET/fxjtoday/article/details/6307285

前边几篇文章仅仅是其它人的简单学习经验,下边这个链接中的内容比较全面。

http://www.red-dove.com/logging/index.html

(2)我需要关注内容

日志信息输出级别

logging模块提供了多种日志级别,如:NOTSET(0),DEBUG(10),

INFO(20),WARNING(30),WARNING(40),CRITICAL(50)。

设置方法:

logger = getLogger()

logger.serLevel(logging.DEBUG)

日志数据格式

使用Formatter设置日志的输出格式。

设置方法:

logger = getLogger()

handler = loggingFileHandler(XXX)

formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

%(asctime)s表示记录日志写入时间,"%Y-%m-%d,%H:%M:%S“设定了时间的具体写入格式。

%(levelname)s表示记录日志的级别。

%(message)s表示记录日志的具体内容。

日志对象初始化

def initLog():

logger = logging.getLogger()

handler = logging.FileHandler("日志保存路径")

formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

handler.setFormatter(formatter)

logger.addHandler(handler)

logger.setLevel

写日志

logging.getLogger().info(), logging.getLogger().debug()......

2. 日志的分析。

(1)我的日志的内容。(log.txt)

2011-12-12,12:11:31 INFO Client1: 4356175.0 1.32366309133e+12 1.32366309134e+12

2011-12-12,12:11:33 INFO Client1: 4361320.0 1.32366309334e+12 1.32366309336e+12

2011-12-12,12:11:33 INFO Client0: 4361320.0 1.32366309389e+12 1.32366309391e+12

2011-12-12,12:11:39 INFO Client1: 4366364.0 1.32366309934e+12 1.32366309936e+12

2011-12-12,12:11:39 INFO Client0: 4366364.0 1.32366309989e+12 1.32366309991e+12

2011-12-12,12:11:43 INFO Client1: 4371416.0 1.32366310334e+12 1.32366310336e+12

2011-12-12,12:11:43 INFO Client0: 4371416.0 1.32366310389e+12 1.32366310391e+12

2011-12-12,12:11:49 INFO Client1: 4376450.0 1.32366310934e+12 1.32366310936e+12

我需要将上述内容逐行读出,并将三个时间戳提取出来,然后将其图形化。

(2) 文件 *** 作以及字符串的分析。

打开文件,读取出一行日志。

file = file("日志路径",“r”)

while True:

line = file.readline()

if len(len) == 0:

break

print line

file.close()

从字符串中提取数据。

字符串 *** 作学习资料:

http://reader.youdao.com/sharelite?itemId=-4646262544179865983&method=viewSharedItemThroughLink&sharedBy=-1137845767117085734

从上面展示出来的日志内容可见,主要数据都是用空格分隔,所以需要使用字符串的

split函数对字符串进行分割:

paraList = line.split(),该函数默认的分割符是空格,返回值为一个list。

paraList[3], paraList[4], paraList[5]中分别以字符串形式存储着我需要的时间戳。

使用float(paraList[3])将字符串转化为浮点数。

(3)将日志图形化。

matplotlib是python的一个绘图库。我打算用它来将日志图形化。

matplotlib学习资料。

matplotlib的下载与安装:

http://yexin218.iteye.com/blog/645894

http://blog.csdn.Net/sharkw/article/details/1924949

对matplotlib的宏观介绍:

http://apps.hi.baidu.com/share/detail/21928578

对matplotlib具体使用的详细介绍:

http://blog.sina.com.cn/s/blog_4b5039210100ie6a.html

在matplotlib中设置线条的颜色和形状:

http://blog.csdn.net/kkxgx/article/details/python

如果想对matplotlib有一个全面的了解,就需要阅读教程《Matplotlib for Python developers》,教程下载地址:

http://download.csdn.net/detail/nmgfrank/4006691

使用实例

import matplotlib.pyplot as plt

listX = [] #保存X轴数据

listY = [] #保存Y轴数据

listY1 = [] #保存Y轴数据

file = file("../log.txt","r")#打开日志文件

while True:

line = file.readline()#读取一行日志

if len(line) == 0:#如果到达日志末尾,退出

break

paraList = line.split()

print paraList[2]

print paraList[3]

print paraList[4]

print paraList[5]

if paraList[2] == "Client0:": #在坐标图中添加两个点,它们的X轴数值是相同的

listX.append(float(paraList[3]))

listY.append(float(paraList[5]) - float(paraList[3]))

listY1.append(float(paraList[4]) - float(paraList[3]))

file.close()

plt.plot(listX,listY,'bo-',listX,listY1,'ro')#画图

plt.title('tile')#设置所绘图像的标题

plt.xlabel('time in sec')#设置x轴名称

plt.ylabel('delays in ms'')#设置y轴名称

plt.show()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12064793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存