Jboss7或者wildfly部署war包的問題 1


1.Jboss的日志系統(standalone模式) 在介紹案例分析之前先來介紹一下Jboss提供的日志系統,下載EAP的zip包解壓后的結構如下:

在standalone目錄下有兩個文件standalone.xml和logging.properties,eap啟動時會讀取並解析standalone.xml文件。

在standalone.xml這份配置文件中有關於日志子系統的相關配置,基本結構如下所示:        <subsystem xmlns="urn:jboss:domain:logging:1.3">            <console-handler name="CONSOLE">                <level name="DEBUG"/>                <formatter>                    <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>                </formatter>            </console-handler>            <periodic-rotating-file-handler name="FILE" autoflush="true">                <formatter>                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>                </formatter>                <file relative-to="jboss.server.log.dir" path="server.log"/>                <suffix value=".yyyy-MM-dd"/>                <append value="true"/>            </periodic-rotating-file-handler>            <logger category="com.arjuna">                <level name="WARN"/>            </logger>            <logger category="org.apache.tomcat.util.modeler">                <level name="WARN"/>            </logger>            <logger category="org.jboss.as.config">                <level name="DEBUG"/>            </logger>            <logger category="sun.rmi">                <level name="WARN"/>            </logger>            <logger category="jacorb">                <level name="WARN"/>            </logger>            <logger category="jacorb.config">                <level name="ERROR"/>            </logger>            <root-logger>                <level name="DEBUG"/>                <handlers>                    <handler name="CONSOLE"/>                    <handler name="FILE"/>                </handlers>            </root-logger>        </subsystem> 在eap解析到這個subsystem之前,jboss會使用logging.properties中的配置進行日志輸出,一旦eap解析完成這個subsystem就會由其來接管日志輸出這項工作,另外如果subsystem中的內容被修改,則其修改會被反應到logging.properties中,因而修改日志配置,最好是修改subsystem中的內容而不是logging.properties。 logging subsystem中的日志配置有多種模式,下面給出三種: console-handler 控制台顯示 periodic-rotating-file-handler 定期新建一個log文件 size-rotating-file-handler 滿足指定大小就重新新建一個log文件

2. 案例分析 在實際部署運行的系統經常是跑在物理機的一個虛擬機中,而且應用服務器(例如Jboss)通常不會只有一個war包而是會有多個,如果使用subsystem的日志輸出方式,日志輸出會雜在一起,對排查問題沒有多大幫助,反而會讓人找不到方向,最好是能夠讓war包自己管理自己的日志輸出(當然是在單機模式下,如果是集群的話還是交給Jboss吧),這樣不僅便於我們修改日志配置(總是感覺修改jboss的subsystem不是那么方便),還能得到特定應用的全部日志輸出。 經過一番搜索找到了一個解決方案,通過一個啟動參數關閉Jboss對日志的托管 <span style="white-space:pre"> </span>-Dorg.jboss.as.logging.per-deployment=false 將其加入jre的啟動參數中,eap啟動時會檢測這個參數,如果其值為false則關閉對應用日志的接管,這樣應用就可以控制自己的日志輸出了。有兩種方式來使用這個參數,一個是利用eap的啟動過程(就是其啟動腳本)中加載的配置,在其中加入對這個參數的使用,另一個是寫一個腳本控制jre與eap的啟動。 (1)利用eap的啟動配置

在standalone.conf中添加下面這一行 <span style="white-space:pre"> </span>JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.as.logging.per-deployment=false"

(2)jre啟動腳本 在linux系統中使用shell腳本控制jre以及eap的啟動是很方便的,寫一個這樣的腳本在jre的啟動命令中添加上述參數就可以實現將應用自己控制log的輸出,腳本樣本如下: kill -9 `ps aux | grep -v 'awk' |awk '/jboss-eap-6.2/{print $2}'`echo 'kill jboss service'rm -rf ./*.logrm -rf ./nohup.outecho 'clean log files'rm -rf /usr/jboss/jboss-eap-6.2/standalone/tmp/vfs/rm -rf /usr/jboss/jboss-eap-6.2/standalone/tmp/work/echo 'clean tmp workspace'/bin/cp -f ./example.war /usr/jboss/jboss-eap-6.2/standalone/deployments/echo 'copy ams.war to workspace'sleep 1snohup /usr/jboss/jboss-eap-6.2/bin/standalone.sh -Dorg.jboss.as.logging.per-deployment=false -b 192.168.2.160 &echo 'start nohup job'sleep 1stail -f ./nohup.out使用腳本啟動時,需要注意如果當前系統中已經運行了一個Jboss服務了則需要先清除(關閉或者殺掉進程)之前的服務,然后如果有必要可以清除之前應用生成的log文件,如果不希望之前應用的緩存對新的應用造成影響,可以把Jboss的緩存清空,之后就可以將war包拷貝到Jboss的deployments目錄下,拷貝完成后進行jre及eap的啟動,使用nohup命令進行任務托管,並附上控制log托管的參數配置,腳本執行到這里,如果想要觀察啟動的過程可以使用tail命令監控nohup的輸出,腳本運行過程基本就是這個流程,當然也可以添加其它的條件判斷比如war包是否存在等。 --------------------- 作者:北海飛舞 來源:CSDN 原文:https://blog.csdn.net/liupin_2011/article/details/42388907?utm_source=copy 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM