⑴ 如何把Tomcat的日誌實時輸出到Web頁面上
command是封裝的一個subprocess.Popen的一個工具函數,返回一個列表分別是標准輸出,錯誤輸出和shell returncode
def ajxGetLog(request,pid,hid):
project = Project.objects.get(pk=pid)
host = Host.objects.get(pk=hid)
scriptname = '%s%s'%(base_path,'get_log.sh')
res = execcommand(['sh',scriptname,host.hostname,project.servicename])
#如果錯誤輸出不為空,直接返回錯誤輸出
if not res[1]:
try:
#res[0]為行號,如果大於20行,從當前行的上面20行開始輸出,為了用戶體驗,你懂得
if int(res[0]) > 20:
line = int(res[0]) - 20
if int(res[0]) == 0:
⑵ 如何把Tomcat的日誌實時輸出到Web頁面上
在部署狀態頁面點擊查看日誌,將會打開日誌頁面,下個圖就是日誌的輸出頁面。
簡約時尚小清新的日誌頁面出來了,是不是很想一個terminal,有沒有覺得俺弄的頁面很漂亮。哈哈哈哈,寫不好前端的運維不是好DBA。
剛開始拿到這個需求,咋覺得很難。因為在伺服器上我們看一個日誌,經常會tail -f 看著刷屏的感覺倍爽。如何在web頁面上實現tailf的效果呢?
後來想想這樣實現是可行的。前端寫一個js定時器,不斷的發ajax請求到後台,每回取出一段日誌。後台取日誌可以直接調用系統命令,或者直接調取shell腳本,取日誌,判斷日誌文件是否存在,是否為空,返回數據的起始位置等,都可以交給shell來做。事實上我就是這么乾的。後台程序寫一堆shell命令調用有點別扭。想到解決方案之後,實現的過程就比較簡單了。我的開發環境是基於python的Django框架來做的,現在就展示這個功能的實現過程。
Django部分
點擊查看日誌的鏈接之後會調到views里的ajxGetLog方法,該方法需要兩個參數,項目id和主機id,這兩個參數主要是用來確定日誌文件的位置。該方法返回行號。
execcommand是封裝的一個subprocess.Popen的一個工具函數,返回一個列表分別是標准輸出,錯誤輸出和shell returncode
def ajxGetLog(request,pid,hid):
project = Project.objects.get(pk=pid)
host = Host.objects.get(pk=hid)
scriptname = '%s%s'%(base_path,'get_log.sh')
res = execcommand(['sh',scriptname,host.hostname,project.servicename])
#如果錯誤輸出不為空,直接返回錯誤輸出
if not res[1]:
try:
#res[0]為行號,如果大於20行,從當前行的上面20行開始輸出,為了用戶體驗,你懂得
if int(res[0]) > 20:
line = int(res[0]) - 20
if int(res[0]) == 0:
line = 1
return render(request,'logs.html',{'pid':pid,'hid':hid,'line':line})
except Exception,e:
print e
return HttpResponse(e)
else:
return HttpResponse(res[1])
html部分首席寫一個ajax請求,傳遞到後台取日誌內容的方法,傳遞三個參數項目id,主機id,和行號,後台將會返回對應行號的日誌內容。該方法代碼如下:
def ajxGetLogHandle(request,pid,hid,line):
project = Project.objects.get(pk=pid)
host = Host.objects.get(pk=hid)
scriptname = '%s%s'%(base_path,'get_log.sh')
res = execcommand(['sh',scriptname,host.hostname,project.servicename,line])
if not res[1] and res[0].strip():
return HttpResponse(res[0])
else:
return HttpResponse(500)
⑶ 如何把Tomcat的日誌實時輸出到Web頁面上
這個很單,寫個servlet,去讀取這個txt文件 然後在web界面上不停的ajax請求 請求到servlet後去讀取這個文本的內容,不停的輸出就實現了自己要的效果了內
⑷ 如何把tomcat的日誌實時輸出到web頁面上
這個很單,寫個servlet,去讀取這個txt文件
然後在web界面上不停的ajax請求
請求到servlet後去讀取這個文本的內容,不停的輸出就實現了自己要的效果了內
⑸ 如何把Tomcat的日誌實時輸出到Web頁面上
在部署狀態頁面點擊查看日誌,將會打開日誌頁面,下個圖就是日誌的輸出頁面。
簡約時尚小清新的日誌頁面出來了,是不是很想一個terminal,有沒有覺得俺弄的頁面很漂亮。
剛開始拿到這個需求,咋覺得很難。因為在伺服器上我們看一個日誌,經常會tail -f 看著刷屏的感覺倍爽。如何在web頁面上實現tailf的效果呢?
後來想想這樣實現是可行的。前端寫一個js定時器,不斷的發ajax請求到後台,每回取出一段日誌。後台取日誌可以直接調用系統命令,或者直接調取shell腳本,取日誌,判斷日誌文件是否存在,是否為空,返回數據的起始位置等,都可以交給shell來做。事實上我就是這么乾的。後台程序寫一堆shell命令調用有點別扭。想到解決方案之後,實現的過程就比較簡單了。我的開發環境是基於python的Django框架來做的,現在就展示這個功能的實現過程。
Django部分
點擊查看日誌的鏈接之後會調到views里的ajxGetLog方法,該方法需要兩個參數,項目id和主機id,這兩個參數主要是用來確定日誌文件的位置。該方法返回行號。
execcommand是封裝的一個subprocess.Popen的一個工具函數,返回一個列表分別是標准輸出,錯誤輸出和shell returncode
def ajxGetLog(request,pid,hid):
project = Project.objects.get(pk=pid)
host = Host.objects.get(pk=hid)
scriptname = '%s%s'%(base_path,'get_log.sh')
res = execcommand(['sh',scriptname,host.hostname,project.servicename])
#如果錯誤輸出不為空,直接返回錯誤輸出
if not res[1]:
try:
#res[0]為行號,如果大於20行,從當前行的上面20行開始輸出,為了用戶體驗,你懂得
if int(res[0]) > 20:
line = int(res[0]) - 20
if int(res[0]) == 0:
line = 1
return render(request,'logs.html',{'pid':pid,'hid':hid,'line':line})
except Exception,e:
print e
return HttpResponse(e)
else:
return HttpResponse(res[1])
html部分首席寫一個ajax請求,傳遞到後台取日誌內容的方法,傳遞三個參數項目id,主機id,和行號,後台將會返回對應行號的日誌內容。該方法代碼如下:
def ajxGetLogHandle(request,pid,hid,line):
project = Project.objects.get(pk=pid)
host = Host.objects.get(pk=hid)
scriptname = '%s%s'%(base_path,'get_log.sh')
res = execcommand(['sh',scriptname,host.hostname,project.servicename,line])
if not res[1] and res[0].strip():
return HttpResponse(res[0])
else:
return HttpResponse(500)
Shell部分
實現返回行號和返回日誌內容的功能是一個shell腳本,上shell
看到shell 是不是很親切,現在知道傳遞的兩個參數的作用了吧,host 和 項目id就是為了確定日誌文件的路徑,如果命令行參數沒有傳遞行號就返回行號,如果有行號,就返回該行內容。
#!/bin/bash
set -e
HOST=$1
SERVICENAME=$2
LINENUM=$3
LOGFILE="/opt/$SERVICENAME/logs/catalina.out"
if [ $LINENUM ];then
ssh -A -T root@$HOST "sed -n ${LINENUM}p $LOGFILE"
else
ssh -A -T root@$HOST "wc -l $LOGFILE|awk '{print $1}'"
fi
前端部分
這部分就是ajax請求了,取出日誌內容,動態添加到頁面上,唯一的一個坑是,setInterval,我原來寫的是一個while的死循環,在循環體里日誌取到最後一行的時候break。我擦,邏輯上很流暢有沒有,死活沒效果,死活不工作。後來知道了,while搞的太快,不等後台返回,就走到下一次循環了。要不while裡面來個sleep。要不弄個定時器,後來上了一個定時器,爽歪歪!
<style type="text/css">
html,body{background:#000; color:#090;}
</style>
{% load staticfiles %}
<div style="margin-top:10px;">
<p id='log'></p>
</div>
<script src="/static/plugins/jquery/jquery.min.js"></script>
<script>
function myalert(){
alert("伺服器提出了一個問題,請找運維尋求答案!")
}
$(function(){
var line = {{line}}
var pid = {{pid}}
var hid = {{hid}}
$.ajax({
url: "{% url 'autodeploy:ajx_handle_log' pid=pid hid=hid line=line %}",
type: 'GET',
success: function(data){
if(data != 500){
$('#log').append('<p>'+data+'</p>');
var t = setInterval(function(){
line++
var url = "http://"+location.host + '/autodeploy/ajxloghandle/'+pid + '&' + hid + '&' +line
$.ajax({
url: url,
type: 'GET',
success: function(data){
if(data != 500){
$('#log').append('<p>'+data+'</p>');
window.scrollTo(0,document.body.scrollHeight);
}else{
clearInterval(t);
}
},
error: function(data) {
myalert();
return false;
}
});
},200);
}else{
myalert();
}
},
error: function(data) {
myalert();
return false;
}
});
});
</script>
⑹ 如何查看Web伺服器日誌
這些日誌信息對計算機犯罪調查人員非常有用。
所謂日誌是指系統所指定對象的某些操作和其操作結果按時間有序的集合。每個日誌文件由日誌記錄組成.每條日誌記錄描述了一次單獨的系統事件。通常情況下,系統日誌
是用戶可以直接閱讀的文本文件,其中包含了一個時間戳和一個信息或者子系統所特有的其他信息。日誌文件為伺服器、工作站、防火牆和應用軟體等IT資源相關活動記錄必要的、有價值的信息,這對系統監控、查詢、報表和安全審汁是十分重要的。日誌文件中的記錄可提供以下用途:監控系統資源,審汁用戶行為,對可疑行為進行報警,確定入侵行為的范圍,為恢復系統提供幫助,生成調查報告,為打擊計算機犯罪提供證據來源。
在windows操作系統中有一位系統運行狀況的忠實記錄者,它可以詳細記錄計算機從開機、運行到關機過程中發生的每一個事件,它就是「事件查看器」。用戶可以利用這個系統維護工具,收集有關硬體、軟體、系統問題方面的信息,並監視系統安全事件,將系統和其他應用程序運行中的錯誤或警告事件記錄下來,便於診斷和糾正系統發生的錯誤和問題。
可以雙擊「控制面板」中「管理工具」中的「事件查看器」,打開事件查看器窗口
⑺ web載入網頁會有日誌嗎
web載入網頁會有日誌,分析如下。
日誌是數據,數據卻不一定是日誌。日誌主要用於記錄發生過的事件,寫入和查詢是常用操作,不推薦對其進行修改操作,日誌過量或者過期的時候,需要清理。
日誌是應用不可分割的一部分,沒有日誌的應用是殘缺的。依賴日誌,我們可以追溯故障、找出BUG、統計數據和分析用戶行為。適當的日誌可以提供幫助,日誌太少和太多都會造成不良影響。
⑻ 如何把Tomcat的日誌實時輸出到Web頁面上
在部署狀態頁面點擊查看日誌,將會打開日誌頁面,下個圖就是日誌的輸出頁面。
簡約時尚小清新的日誌頁面出來了,是不是很想一個terminal,有沒有覺得俺弄的頁面很漂亮。哈哈哈哈,寫不好前端的運維不是好DBA。
剛開始拿到這個需求,咋覺得很難。因為在伺服器上我們看一個日誌,經常會tail -f 看著刷屏的感覺倍爽。如何在web頁面上實現tailf的效果呢?
後來想想這樣實現是可行的。前端寫一個js定時器,不斷的發ajax請求到後台,每回取出一段日誌。後台取日誌可以直接調用系統命令,或者直接調取shell腳本,取日誌,判斷日誌文件是否存在,是否為空,返回數據的起始位置等,都可以交給shell來做。事實上我就是這么乾的。後台程序寫一堆shell命令調用有點別扭。想到解決方案之後,實現的過程就比較簡單了。我的開發環境是基於python的Django框架來做的,現在就展示這個功能的實現過程。
Django部分
點擊查看日誌的鏈接之後會調到views里的ajxGetLog方法,該方法需要兩個參數,項目id和主機id,這兩個參數主要是用來確定日誌文件的位置。該方法返回行號。
execcommand是封裝的一個subprocess.Popen的一個工具函數,返回一個列表分別是標准輸出,錯誤輸出和shell returncode
def ajxGetLog(request,pid,hid): project = Project.objects.get(pk=pid) host = Host.objects.get(pk=hid) scriptname = '%s%s'%(base_path,'get_log.sh') res = execcommand(['sh',scriptname,host.hostname,project.servicename]) #如果錯誤輸出不為空,直接返回錯誤輸出 if not res[1]: try: #res[0]為行號,如果大於20行,從當前行的上面20行開始輸出,為了用戶體驗,你懂得 if int(res[0]) > 20: line = int(res[0]) - 20 if int(res[0]) == 0: line = 1 return render(request,'logs.html',{'pid':pid,'hid':hid,'line':line}) except Exception,e: print e return HttpResponse(e) else: return HttpResponse(res[1])
html部分首席寫一個ajax請求,傳遞到後台取日誌內容的方法,傳遞三個參數項目id,主機id,和行號,後台將會返回對應行號的日誌內容。該方法代碼如下: def ajxGetLogHandle(request,pid,hid,line): project = Project.objects.get(pk=pid) host = Host.objects.get(pk=hid) scriptname = '%s%s'%(base_path,'get_log.sh') res = execcommand(['sh',scriptname,host.hostname,project.servicename,line]) if not res[1] and res[0].strip(): return HttpResponse(res[0]) else: return HttpResponse(500)
Shell部分實現返回行號和返回日誌內容的功能是一個shell腳本,上shell看到shell 是不是很親切,現在知道傳遞的兩個參數的作用了吧,host 和 項目id就是為了確定日誌文件的路徑,如果命令行參數沒有傳遞行號就返回行號,如果有行號,就返回該行內容。#!/bin/bash set -e HOST=$1 SERVICENAME=$2 LINENUM=$3 LOGFILE="/opt/$SERVICENAME/logs/catalina.out"if [ $LINENUM ];then ssh -A -T root@$HOST "sed -n ${LINENUM}p $LOGFILE"else ssh -A -T root@$HOST "wc -l $LOGFILE|awk '{print \$1}'"fi
前端部分這部分就是ajax請求了,取出日誌內容,動態添加到頁面上,唯一的一個坑是,setInterval,我原來寫的是一個while的死循環,在循環體里日誌取到最後一行的時候break。我擦,邏輯上很流暢有沒有,死活沒效果,死活不工作。後來知道了,while搞的太快,不等後台返回,就走到下一次循環了。要不while裡面來個sleep。要不弄個定時器,後來上了一個定時器,爽歪歪!<style type="text/css"> html,body{background:#000; color:#090;} </style> {% load staticfiles %} <div style="margin-top:10px;"> <p id='log'></p> </div> <script src="/static/plugins/jquery/jquery.min.js"></script> <script> function myalert(){ alert("伺服器提出了一個問題,請找運維尋求答案!") } $(function(){ var line = {{line}} var pid = {{pid}} var hid = {{hid}} $.ajax({ url: "{% url 'autodeploy:ajx_handle_log' pid=pid hid=hid line=line %}", type: 'GET', success: function(data){ if(data != 500){ $('#log').append('<p>'+data+'</p>'); var t = setInterval(function(){ line++ var url = "http://"+location.host + '/autodeploy/ajxloghandle/'+pid + '&' + hid + '&' +line $.ajax({ url: url, type: 'GET', success: function(data){ if(data != 500){ $('#log').append('<p>'+data+'</p>'); window.scrollTo(0,document.body.scrollHeight); }else{ clearInterval(t); } }, error: function(data) { myalert(); return false; } }); },200); }else{ myalert(); } }, error: function(data) { myalert(); return false; } }); }); </script>
⑼ 如何把Tomcat的日誌實時輸出到Web頁面上
這個很單,你寫個servlet,去讀取這個txt文件
然後在web界面上不停的ajax請求
請求到servlet後去讀取這個文本的內容,不停的輸出就實現了你要的效果了
⑽ 怎麼用Python + Flask框架實現Web應用實現日誌記錄功能
首先做這個學會Flask框架,前端寫一個用戶注冊的頁面,當用戶提交信息的時候,可以通過表單將數據傳到資料庫,用一個表把用戶信息存起來,通過Flask去獲取後台的數據,傳回到一個新的頁面,展示出來。