日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

配置Tomcat的日志系統(tǒng)

系統(tǒng) 2301 0
成功配置tomcat的log4j日志系統(tǒng),格式:HTML+每天以yyyy-mm-dd.log命名的日志文件
一、引言:
實(shí)習(xí)單位讓用log4j配置webapp的日志系統(tǒng),要求產(chǎn)生的日志文件是html格式,而且是每天以yyyy-mm-dd日期格式命名的日志文件。
這個(gè)以前讓自己費(fèi)神了一段時(shí)間,近期花了兩天時(shí)間總算配置成功了!只是配置成功的是tomcat的,不是單個(gè)webapp的,現(xiàn)把步驟記錄下來(lái),晚上再配置webapp的。先寫(xiě)一步一步的操作,后面再解說(shuō)一些log4j的關(guān)鍵知識(shí)點(diǎn)。

二、一步一步配置tomcat log4j日志系統(tǒng)

第一步:下載log4j.jar,并把log4j.jar放入$CATALINA_HOME/common/lib.
第二步:新建log4j.properties文件,放到$CATALINA_HOME/common/classes/文件夾下.
第三步:寫(xiě)配置文件log4j.properties:
#log4j.properties

log4j.rootLogger=warn, A1

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=F:/UserWorkSpace/jiangcm/Tomcat 5.0/logs/tomcat_log_
log4j.appender.A1.DatePattern=yyyy-MM-dd'.html'
log4j.appender.A1.layout=org.apache.log4j.HTMLLayout

log4j.logger.org.apache=warn


注解:
1)你僅僅須要改動(dòng)這一行:

log4j.appender.R.File=F:/UserWorkSpace/jiangcm/Tomcat 5.0/logs/tomcat_log_

將路徑改動(dòng)為你的Tomcat的logs文件夾,假設(shè)你的系統(tǒng)環(huán)境配置了CATALINA_HOME環(huán)境變量,那么能夠使用${catalina.home}/logs/tomcat_log_進(jìn)行配置就可以。

2)上面的log4j配置僅記錄比較重要的日志(警告warning、錯(cuò)誤error、致命錯(cuò)誤fatal)到Tomcat的logs文件夾下的tomcat_log_ 文件里,每天晚上過(guò)0點(diǎn)的第一條信息會(huì)觸發(fā)重命名tomcat_log_,將當(dāng)前日期附加在tomcat_log_ 文件名稱(chēng)中,并產(chǎn)生新的tomcat_log_ 文件。

3)使用FileAppender能夠?qū)og信息輸出到文件里,可是假設(shè)文件太大了讀起來(lái)就不方便了。這時(shí)就能夠使用 DailyRollingAppender。DailyRollingAppender能夠把Log信息輸出到依照日期來(lái)區(qū)分的文件里。如上述log4j.properties配置文件就會(huì)每天產(chǎn)生一個(gè)html文件,每一個(gè)html文件僅僅記錄當(dāng)天的log信息。

4)設(shè)置了DailyRollingAppender 以后假設(shè)配置項(xiàng)里面設(shè)置了文件的最大值,那么應(yīng)該去掉,否則可能不能產(chǎn)生以天為單位的日志。

5)Log4j的org.apache.log4j.DailyRollingFileAppender源代碼223行
scheduledFilename = fileName+sdf.format(new Date(file.lastModified()));

也就是說(shuō)備份的日至文件都是文件名稱(chēng)后面加上你所配的DatePattern格式化后的字符串。除非你自己寫(xiě)個(gè)appender。

6)上述log4j.properties生成的日志文件,名稱(chēng)格式例如以下:tomcat_log_2007-02-24.html;
注意:生成的第一個(gè)日志文件格式例如以下:tomcat_log_,即僅僅是A1.file中設(shè)置的名稱(chēng);生成的第二個(gè)日志文件之后的文件命名才會(huì)加上所配的DatePattern格式化后的字符串。

7)配置DailyRollingFileAppender格式的日志系統(tǒng),假設(shè)要驗(yàn)證生成的日志文件結(jié)果,要注意一點(diǎn),須要關(guān)閉tomcat,改動(dòng)系統(tǒng)日期為第二天的日期,再重新啟動(dòng)tomcat,這樣才干自己主動(dòng)生成一個(gè)新的日志文件;由于要改動(dòng)日期才干觸發(fā)產(chǎn)生新的日志文件。


第四步:重新啟動(dòng)tomcat.

ok,如今就已經(jīng)在tomcat中配置好log4j了。

第五步:驗(yàn)證

驗(yàn)證上述配置的log4j日志系統(tǒng):

利用tomcat自帶的web應(yīng)用程序jsp-examples,如今配置好了日志系統(tǒng),那么假設(shè)在jsp-examples這個(gè)web應(yīng)用程序的.java文件里使用了日志,則IE訪(fǎng)問(wèn)這個(gè)web app的jsp文件時(shí),就應(yīng)該可以自己主動(dòng)產(chǎn)生日志文件到配置的路徑中。

步驟:
a)進(jìn)入文件夾“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-examples\WEB-INF\classes\dates”;
b)改動(dòng)JspCalendar.java文件,在這個(gè)文件里加上日志的代碼,例如以下所看到的:
package dates;

import java.text.DateFormat;
import java.util.*;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.*;


public class JspCalendar {
Calendar calendar = null;
static Logger logger = Logger.getLogger(JspCalendar.class);


public JspCalendar() {
logger.debug("This is debug.");
logger.info("This is an info.");
logger.warn("This is a warning.");
logger.error("This is an error.");
logger.fatal("This is a fatal error.");

calendar = Calendar.getInstance();
Date trialTime = new Date();
calendar.setTime(trialTime);
}

public int getYear() {

return calendar.get(Calendar.YEAR);

}
……
}

凝視:
加上的代碼有兩部分,一是構(gòu)造一個(gè)logger對(duì)象,一是輸出logger信息,例如以下所看到的,其它代碼沒(méi)動(dòng):
static Logger logger = Logger.getLogger(JspCalendar.class);

logger.debug("This is debug.");
logger.info("This is an info.");
logger.warn("This is a warning.");
logger.error("This is an error.");
logger.fatal("This is a fatal error.");

c)又一次編譯JspCalendar.java;
d)改動(dòng)日期為2007-02-26;
e)重新啟動(dòng)tomcat;
f)在IE中輸入“http://localhost:8086/jsp-examples/dates/date.jsp”,執(zhí)行該jsp文件;
g)這時(shí)在文件夾“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下看到了新產(chǎn)生的日志文件:tomcat_log_2007-02-25.html.

ok!說(shuō)明日志系統(tǒng)配置成功啦,啦~!!

三、遺留問(wèn)題
3.1 上述配置的是tomcat的日志系統(tǒng),應(yīng)該是對(duì)tomcat下的全部webapp都起作用,如今自己僅僅驗(yàn)證了jsp-examples這個(gè)webapp,還沒(méi)有驗(yàn)證過(guò)其它的webapp。

3.2 配置的是tomcat的日志系統(tǒng),輸出的應(yīng)該都僅僅是tomcat的標(biāo)準(zhǔn)輸入/輸出信息等,感覺(jué)webapp的日志信息應(yīng)該和tomcat的系統(tǒng)日志信息分開(kāi),可是應(yīng)該怎么分開(kāi)呢?假設(shè)對(duì)每一個(gè)webapp單獨(dú)配置日志系統(tǒng),那么這些日志內(nèi)容會(huì)輸出到tomcat的系統(tǒng)日志中嗎?

3.3 不需不論什么配置,tomcat5.0的默認(rèn)日志文件夾“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下就有按日期產(chǎn)生的日志文件,文件命名格式例如以下:localhost_log.2007-02-26.txt,而且這個(gè)文件是自己主動(dòng)生成的,上述配置在文件夾“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下生成了tomcat_log_2007-02-25.html文件,而且tomcat本身也自己主動(dòng)生成了一個(gè)localhost_log.2007-02-26.txt文件,相當(dāng)于自己主動(dòng)生成了兩個(gè)日志文件。
當(dāng)然這兩個(gè)日志文件的內(nèi)容不同,tomcat_log_2007-02-25.html中的內(nèi)容例如以下:
待貼圖

而localhost_log.2007-02-26.txt的內(nèi)容例如以下:
2007-02-26 14:03:21 StandardContext[/balancer]org.apache.webapp.balancer.BalancerFilter: init(): ruleChain: [org.apache.webapp.balancer.RuleChain: [org.apache.webapp.balancer.rules.URLStringMatchRule: Target string: News / Redirect URL: http://www.cnn.com], [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http://www.yahoo.com], [org.apache.webapp.balancer.rules.AcceptEverythingRule: Redirect URL: http://jakarta.apache.org]]
2007-02-26 14:03:22 StandardContext[/jsp-examples]ContextListener: contextInitialized()
2007-02-26 14:03:22 StandardContext[/jsp-examples]SessionListener: contextInitialized()
2007-02-26 14:03:22 StandardContext[/servlets-examples]ContextListener: contextInitialized()
2007-02-26 14:03:22 StandardContext[/servlets-examples]SessionListener: contextInitialized()

感覺(jué)就是localhost_log.2007-02-26.txt中是tomcat的系統(tǒng)日志,而omcat_log_2007-02-25.html中是.java中自己寫(xiě)的logger的內(nèi)容。

那么,是不是tomcat5中系統(tǒng)日志就會(huì)自己主動(dòng)按日生成,不需配置;開(kāi)發(fā)者假設(shè)須要日志系統(tǒng),那么就在自己的webapp中配置一個(gè),而不須要管tomcat的系統(tǒng)日志了???

3.4 tomcat_log_2007-02-25.html與localhost_log.2007-02-26.txt內(nèi)容不同的原因有沒(méi)有可能是由于:
自己的log4j.properties中設(shè)置apache的級(jí)別是warn:??
log4j.logger.org.apache=warn

剛驗(yàn)證了一下,好像沒(méi)有關(guān)系,“l(fā)og4j.logger.org.apache=warn”這句好像不僅對(duì)localhost_log.2007-02-26.txt無(wú)影響,并且對(duì)tomcat_log_2007-02-25.html的輸出也無(wú)影響。
那么“l(fā)og4j.logger.org.apache=warn”這句的作用是什么呢???

3.5 webapp中怎樣配置日志系統(tǒng),而且把webapp的日志信息與tomcat自身的系統(tǒng)日志分開(kāi)???

四、參考資料:
1.我想每一天都產(chǎn)生一個(gè)以"yyyy-mm-dd.log"命名日志文件,請(qǐng)問(wèn)該怎么配置file選項(xiàng),謝謝了!
http://community.csdn.net/Expert/TopicView3.asp?id=4788993

2.使用log4j為T(mén)omcat輸出日志
http://www.chinawin.net/myblog/archives/314-log4jTomcataeoeOE.html

1. 假設(shè)Tomcat當(dāng)前正在執(zhí)行,關(guān)閉Tomcat。
2. 從Apache的站點(diǎn)下載Commons Logging發(fā)行包。
3. 將壓縮包中的commons-logging.jar解壓縮到你Tomcat安裝路徑的common/lib文件夾中。
4. 從Apache的站點(diǎn)下載Log4j發(fā)行包。
5. 將壓縮包中的log4j-1.2.12.jar解壓縮到你Tomcat安裝路徑的common/lib文件夾中。
6. 在Tomcat安裝路徑的common/classes 創(chuàng)建log4j的配置文件log4j.properties(配置文件在隨后一節(jié))。
7. 重起Tomcat


3.在Web應(yīng)用中使用log4j
http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184

注意:上面的load-on-startup應(yīng)設(shè)為1,以便在Web容器啟動(dòng)時(shí)即裝入該Servlet。log4j.properties文件放在根的properties子文件夾中,也能夠把它放在其他文件夾中。應(yīng)該把.properties文件集中存放,這樣方便管理。

4.og4j日志文件路徑的配置
http://wangluwww.spaces.live.com/blog/

解決log4j輸出的日志文件的位置的配置問(wèn)題

我一直希望自己的web應(yīng)用的配置可以簡(jiǎn)化,最好的方式就是打個(gè)包后扔哪都能用,即使非得再做一些配置的話(huà),也希望僅僅是一些連接池的配置信息。這個(gè)目標(biāo)在如今手頭的這個(gè)項(xiàng)目中也差點(diǎn)兒達(dá)到了,除了log文件的位置。
在log4j的配置文件里對(duì)于log輸出的路徑一向都是使用絕對(duì)路徑,這樣就導(dǎo)致在不同的機(jī)器上部署時(shí)都得又一次定義一下log文件的輸出位置。雖說(shuō)費(fèi)時(shí)不多,可對(duì)于我這樣的寧可少一事,不愿多一事的人來(lái)說(shuō),總是認(rèn)為有點(diǎn)郁悶。
踏破鐵鞋無(wú)覓,得來(lái)不費(fèi)功夫。不經(jīng)意見(jiàn)看到了一個(gè)文檔,介紹說(shuō)log4j的配置文件支持windows的環(huán)境變量,格式類(lèi)似velocity:${env},ok,問(wèn)題解決:
一般來(lái)說(shuō)我們會(huì)將一些初始化的信息放到web.xml中,以便在系統(tǒng)啟動(dòng)時(shí)就執(zhí)行。循此思路,將log文件的位置放到webapp以下的隨意處,如webapp/WEB-INF/conf/logs以下,則能夠在log4j.properties文件里做例如以下定義:
log4j.appender.R.File=${webappHome}/WEB-INF/conf/logs/sysout.log
當(dāng)中的${webappHome}即是通過(guò)System.setProperty("webappHome", webappHome);實(shí)現(xiàn)的,此操作可通過(guò)一初始的servlet進(jìn)行,詳細(xì)方法略。

5. Log4j優(yōu)化
http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184

有多少人用Log4j的時(shí)候會(huì)在每個(gè)Debug/Info之前加一個(gè)推斷?

可能非常多人都說(shuō)了,這有什么關(guān)系,我在執(zhí)行的時(shí)候是把Log Level設(shè)置成Error的。

那么請(qǐng)看以下這個(gè)代碼:

String result;
...
...
...
logger.debug(”result is” + result );

再看看這個(gè)代碼:

String result;
...
...
...
if(logger.isDebugEnabled())
{
logger.debug(”result is” + result );
}


把Log Level設(shè)置成ERROR,執(zhí)行結(jié)果又差別嗎?沒(méi)有!!
程序的性能有差別嗎?差別大了!!!

由于什么呢?

盡管第一段代碼也不產(chǎn)生Log輸出,可是debug()里面的字符串變量是實(shí)例化了,明確了嗎?

這個(gè)就是為什么非常多人抱怨Log4j占用非常大CPU時(shí)間的原因了,尤其是在大循環(huán)的時(shí)候。

趕快在你的程序中加上這種推斷條件吧。

配置Tomcat的日志系統(tǒng)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!?。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 池州市| 全南县| 新兴县| 靖江市| 灵台县| 景德镇市| 襄城县| 罗山县| 黄冈市| 咸宁市| 右玉县| 贵定县| 凤凰县| 法库县| 手游| 鹿邑县| 红河县| 漯河市| 塔城市| 常州市| 桂林市| 旺苍县| 大化| 烟台市| 沙坪坝区| 体育| 泰来县| 兰西县| 图们市| 博罗县| 武陟县| 齐河县| 莱芜市| 崇礼县| 望都县| 乌拉特前旗| 辰溪县| 岱山县| 沈阳市| 雷州市| 成安县|