當前位置:首頁 » 網頁前端 » web日誌滾動輸出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web日誌滾動輸出

發布時間: 2023-05-13 11:42:38

❶ 如何把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 列印滾動條窗口 解決辦法

瀏覽器(firefox,chrome)安裝 Full Web Page Screenshots 插件。

點插件圖標,選擇 安裝「高級功能」 。蘆桐侍

選擇 「截取整個頁面輪沒並陪吵且...」 , 然後選擇二級選項 「另存為PDF」

❺ 如何把Tomcat的日誌實時輸出到Web頁面上

這個和在頁面上列印數據是一樣的啊,只要在後台獲取到log日誌然後就可以輸出

❻ 如何把tomcat的日誌實時輸出到web頁面上

配置文件:
log4j.rootLogger = DEBUG,fileAppender
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4J.appedner.fileAppender.File = mylog.log

FileAppender 選項
Threshold=WARN:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂著所有的消息都會被立即輸出。
File=mylog.log:指定消息輸出到沖笑灶mylog.log文件。
Append=false:默認散扮值是true,即將消息增升陪加到指定文件中,false指將消息覆蓋指定的文件內