㈠ Windows10 中建立自动执行的python脚本,解决python不产生日志的问题
问题:按伍游照网上的教程,设置了自动执行的任亮首务,虽然脚本能运行,但是py文件并没有产生日志文件。
解决方法:在程序或脚本中 填写python.exe的绝对地址,我这里填写的是虚拟环境下的python地址
添加参数 : 这里填写脚本wind.py的绝对位置
起始于: 填写的是 日志产生文件的 位置。
由于我的脚本位置和 日志产生的位置是一样的。所以对于文件位置不一样的可能没有参考意义腔键销。
下面是运行后的结果:
㈡ 如何使用python脚本实现对windows系统监控
示例:
#!/usr/bin/envpython
#encoding:utf-8
"""
MonitorLog.py
Usage:MonitorLog.py...
Monitorthelogfile
-flogfile
-hhelpinfo
pythonMonitorLog.py-fC:monitor.log
Createdbyzhouboon2011-08-29.
"""
importsys
importos
importgetopt
importsubprocess
importtime
importcodecs
importwinsound
ABSPATH=os.path.dirname(os.path.abspath(__file__))
MONITERCONF='moniter_keyword.txt'#utf8file
defmain():
try:
opts,args=getopt.getopt(sys.argv[1:],'hf:')
exceptgetopt.GetoptError,err:
printstr(err)
print__doc__
return1
path=''
fork,vinopts:
ifk=='-f':
path=v
elifk=='-h':
print__doc__
return0
ifnot(pathandos.path.exists(path)):
print'Invalidpath:%s'%path
print__doc__
return2
#命令行元组
cmd=('tail','-f',path)
print''.join(cmd)
output=subprocess.Popen(cmd,stdout=subprocess.PIPE)
keywordMap={}
#加载监控的关键字信息
withcodecs.open(os.path.join(ABSPATH,MONITERCONF),'r','utf8')asf:
lines=f.readlines()
forlineinlines:
line=line.strip()
ifnotline:
continue
keyword,wav=line.strip().split(':')
keywordMap[keyword]=wav
whileTrue:
line=output.stdout.readline()
#processcode,得到输出信息后的处理代码
ifnotline:
time.sleep(0.01)
continue
line=line.strip().decode('utf8')
printline
forkeywordinkeywordMap:
ifline.find(keyword)>-1:
winsound.PlaySound(keywordMap[keyword],
winsound.SND_NODEFAULT)
#time.sleep(0.01)
return0
if__name__=='__main__':
sys.exit(main())
㈢ Python日志—Python日志模块logging介绍
从事与软件相关工作的人,应该都听过“日志”一词。
日志就是跟踪软件运行时事件的方法,为了能够在程序运行过程中记录错误。
通过日志记录程序的运行,方便我们查询信息,以便追踪问题、进行维护和调试、还是数据分析。
并且各编程语言都形成了各自的日志体系和相应的框架。
日志的作用总结:
首先我们要树立一个观点,那就是“不是为了记录日志而记录日志,日志也不是随意记的”。要实现能够只通过日志文件还原整个程序执行的过程,达到能透明地看到程序里执行情况,每个线程每个过程到底执行结果的目的。日志就像飞机的黑匣子一样,应当能够复原异常的整个现场乃至细节。
在项目中,日志这个功能非常重要,我们要重视起来。
在Python中,使用logging模块来进行日志的处理。
logging是Python的内置模块,主要用于将日志信息进行格式化内容输出,可将格式化内容输出到文件,也可输出到屏幕。
我们在开发过程中,常用print()函数来进行调试,但是在实际应用的部署时,我们要将日志信息输出到文件中,方便后续查找以及备份。
在我们使用日志管理时,我们也可以将日志格式化成Json对象转存到ELK中方便图形化查看及管理。
logging模块将日志系统从高向低依次定义了四个类,分别是logger(日志器)、handler(处理器)、filter(过滤器)和formatter(格式器)。其中由日志器生成的实例将接管原本日志记录函数logging.log的功能。
说明:
我们先来思考下下面的两个问题:
在软件开发阶段或部署开发环境时,为了尽可能详细的查看应用程序的运行状态来保证上线后的稳定性,我们可能需要把该应用程序所有的运行日志全部记录下来进行分析,这是非常耗费机器性能的。
当应用程序正式发布或在生产环境部署应用程序时,我们通常只需要记录应用程序的异常信息、错误信息等,这样既可以减小服务器的I/O压力,也可以避免我们在排查故障时被淹没在日志的海洋里。
那么怎样才能在不改动应用程序代码的情况下,根据事件的重要性或者称之为等级,实现在不同的环境中,记录不同详细程度的日志呢?
这就是日志等级的作用了,我们通过配置文件指定我们需要的日志等级就可以了。
说明:
总结:
开发应用程序时或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息,可以方便进行开发或部署调试。 应用上线或部署生产环境时,应用使用WARNING或ERROR或CRITICAL级别的日志,来降低机器的I/O压力和提高获取错误日志信息的效率。 日志级别的指定通常都是在应用程序的配置文件中进行指定的。 不同的应用程序所定义的日志等级会有所差别,根据实际需求来决定。
㈣ 使用python打包exe后在其他电脑运行异常,请教各位大神有谁知道吗如下实在windows日志上找到的信息
有可能是在高版本的windows(或python)上生成的exe,换低版本没法使用。
建议换比如python3.6来生成。
㈤ windows下怎么分析apache日志
Apache 的标准中规定了4类日志:
错误日志
访问日志
传输日志
Cookie日志
其中:传输日志和Cookie日志被Apache 2.0认为已经过时。所以本节仅仅讨论错误日志和访问日志。同时错误日志和访问日志被Apache 2.0默认设置。
能从日志中获取哪些信息
* 访问日志
o 访问服务器的远程机器的地址:可以得知浏览者来自何方
o 浏览者访问的资源:可以得知网站中的哪些部分最受欢迎
o 浏览者的浏览时间:可以从浏览时间(如工作时间或休闲时间)对网站内容进行调整
o 浏览者使用的浏览器:可以根据大多数浏览者使用的浏览器对站点进行优化
* 错误日志
o 获知失效链接
o 获知 CGI 错误
o 获知用户认证错误
配置错误日志
错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息,比如服务器何时启动、何时关闭等。
错误日志配置指令
ErrorLog
ErrorLog 指令指定了当服务器遇到错误时记录错误日志的文件名。其格式为:
格式1:ErrorLog 错误日志文件名
格式2:ErrorLog "|管道程序名"
格式1直接指定错误日志文件名,除非文件位置用”/“开头,否则 ErrorLog 所制定的文件位置是相对于 ServerRoot 目录的相对路径。
格式2实现管道日志,它指定一个命令来处理错误日志。
Apache 编译时默认的错误日志可以使用如下命令获得:
$ apache2 -V| grep DEFAULT_ERRORLOG
-D DEFAULT_ERRORLOG="logs/error_log"
LogLevel
LogLevel 用于调整记于错误日志中的信息的详细程度。其格式为:
LogLevel 错误日志记录等级
下面着重说说日志记录等级:
紧急程度 等级 说明
1 emerg 出现紧急情况使得该系统不可用,如系统宕机等
2 alert 需要立即引起注意的情况
3 crit 危险情况的警告
4 error 除了emerg、alert、crit的其他错误
5 warn 警告信息
6 notice 需要引起注意的情况,但不如error、warn重要
7 info 值得报告的一般消息
8 debug 由运行于debug模式的程序所产生的消息
如果指定了等级 warn,那么就记录紧急程度为1至5的所有错误信息。
Ubuntu 中 Apache 的错误日志配置
配置错误日志相对简单,只要说明日志文件的存放路径和错误日志记录等级即可。
从 Ubuntu 中的 /etc/apache2/apache2.conf 中可知,默认的错误日志存放在 /var/log/apache2/error.log
ErrorLog /var/log/apache2/error.log
LogLevel warn
您可以在 /etc/apache2/apache2.conf 中设置错误日志记录等级,也可以在相应的虚拟主机的配置文件中设置。
错误日志文件举例
下面是一个错误日志文件的截取。
$ sudo tac /var/log/apache2/error.log
[Wed Jun 20 14:53:15 2007] [error] [client 192.168.0.66] File does not exist: /usr/share/phpmyadmin/favicon.ico
[Wed Jun 20 11:12:50 2007] [notice] Apache/2.0.55 (Ubuntu) DAV/2 SVN/1.3.1 mod_python/3.1.4 Python/2.4.3 PHP/5.1.2 configured -- resuming normal operations
[Wed Jun 20 11:12:49 2007] [notice] Digest: done
[Wed Jun 20 11:12:49 2007] [notice] Digest: generating secret for digest authentication ...
[Wed Jun 20 09:22:22 2007] [notice] caught SIGTERM, shutting down
从文件内容可以看出,每一行记录了一个错误。格式为:
日期和时间 错误等级 错误消息
配置访问日志
CustomLog
CustomLog 指令用来对服务器的请求进行日志记录。格式为:
格式1:CustomLog 访问日志文件名 记录格式说明串|格式昵称
格式2:CustomLog "|管道程序名 访问日志文件名" 记录格式说明串|格式昵称
其中:
1. 访问日志文件名:除非文件位置用”/“开头,否则所制定的文件位置是相对于 ServerRoot 目录的相对路径
2. 格式昵称:使用 LogFormat 指令将一个记录格式说明串赋以一个名称
3. 记录格式说明串:用字符串和格式说明符(以%开头)指定日志记录的内容
4. 管道程序名:管道符”|”后面紧跟着一个程序的路径,这个程序把日志从标准输入设备中读入并处理。
在 Ubuntu 的 Apache 默认配置中并没有使用 CustomLog 设置访问日志,若您希望记录访问日志,您需要在虚拟主机的配置文件中分别设置,例如:在 /etc/apache2/sites-available/default 中有如下的设置:
CustomLog /var/log/apache2/access.log combined
LogFormat
为了便于分析 Apache 的访问日志,Apache 的默认配置文件中,按记录的信息不同(用不同格式昵称说明不同的信息)将访问日志分为4类,并由 LogFormat 指令定义了昵称,如表所示。
格式分类 格式昵称 说明
普通日志格式(common log format,CLF) common 大多数日志分析软件都支持这种格式
参考日志格式(referer log format) referer 记录客户访问站点的用户身份
代理日志格式(agent log format) agent 记录请求的用户代理
综合日志格式(combined log format) combined 结合以上三种日志信息
LogFormat 指令用于定义访问日志的记录格式。格式为:
LogFormat "记录格式说明串" 格式昵称
从 /etc/apache2/apache2.conf 中可知,在 Ubuntu 的 Apache 中定义了下面的 4 种类型的访问日志:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
由于综合日志格式简单地结合了3种日志信息,所以在配置访问日志时,要么使用一个综合文件进行记录,要么使用分离的多个(1-3)文件记录。通常使用一个综合日志格式文件进行记录,配置为:
CustomLog /var/log/apache2/access.log combined
若使用3个文件分别进行记录,配置为:
CustomLog /var/log/apache2/access.log common
CustomLog /var/log/apache2/referer.log referer
CustomLog /var/log/apache2/agent.log agent
下面的指令组:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
与下面的指令等效:
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
通常我们配置访问日志时,使用先使用 LogFormat 指令定义格式昵称,然后再在 CustomLog 指令中引用昵称的方法。
格式说明符
在使用 LogFormat 和 CustomLog 指令中为了说明要记录的日志内容,可以使用的常用格式说明符如下表。
格式说明符 说明
%v 进行服务的服务器的标准名字 ServerName,通常用于虚拟主机的日志记录中。
%h 客户机的 IP 地址。
%l 从identd服务器中获取远程登录名称,基本已废弃。
%u 来自于认证的远程用户。
%t 连接的日期和时间。
%r HTTP请求的首行信息,典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。经常可能出现的 METHOD 是 GET、POST 和 HEAD;RESOURCE 是指浏览者向服务器请求的文档或 URL;PROTOCOL 通常是HTTP,后面再加上版本号,通常是 HTTP/1.1。
%>s 响应请求的状态代码,一般这项的值是 200,表示服务器已经成功地响应浏览器的请求,一切正常;以 3 开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置;以 4 开头的状态代码表示客户端存在某种错误;以 5 开头的状态代码表示服务器遇到了某个错误。
%b 传送的字节数(不包含HTTP头信息),将日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
%{Referer}i 记录引用此资源的网页。
%U 请求的URL路径,不包含查询串。
%{User-Agent}i 使用的浏览器信息。
访问日志文件举例
由于整个格式说明字符串是放在”“之内的,所以若要输出的日志信息内含有引号,需要将”前加转义符\。例如:若要输出子串”GET /apache_pb.gif HTTP/1.0”,则格式字符串为\”%r\”。
㈥ 如何用 python 分析网站日志
日志的记录
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.you.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..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()
㈦ python 分析系统日志
这个不用做计划任务。直接用tail -f 文件名|grep executing too slow
这样就可以了。然后wc统计行数。
如果你一定要用python做。就使用文件对象中的seek方法,移到上次处理的位置。