㈠ 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方法,移到上次處理的位置。