成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件

一、引言:

实习单位让用log4j配置webapp的日志系统,要求产生的日志文件是html格式,而且是每天以yyyy-mm-dd日期格式命名的日志文件。

这个以前让自己费神了一段时间,近期花了两天时间总算配置成功了!只是配置成功的是tomcat的,不是单个webapp的,现把步骤记录下来,晚上再配置webapp的。先写一步一步的操作,后面再解说一些log4j的关键知识点。



二、一步一步配置tomcat log4j日志系统



第一步:下载log4j.jar,并把log4j.jar放入$CATALINA_HOME/common/lib.

第二步:新建log4j.properties文件,放到$CATALINA_HOME/common/classes/文件夹下.

第三步:写配置文件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)你仅仅须要改动这一行:



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



将路径改动为你的Tomcat的logs文件夹,假设你的系统环境配置了CATALINA_HOME环境变量,那么能够使用${catalina.home}/logs/tomcat_log_进行配置就可以。



2)上面的log4j配置仅记录比較重要的日志(警告warning、错误error、致命错误fatal)到Tomcat的logs文件夹下的tomcat_log_ 文件里,每天晚上过0点的第一条信息会触发重命名tomcat_log_,将当前日期附加在tomcat_log_ 文件名称中,并产生新的tomcat_log_ 文件。



3)使用FileAppender能够将log信息输出到文件里,可是假设文件太大了读起来就不方便了。这时就能够使用 DailyRollingAppender。DailyRollingAppender能够把Log信息输出到依照日期来区分的文件里。如上述log4j.properties配置文件就会每天产生一个html文件,每一个html文件仅仅记录当天的log信息。



4)设置了DailyRollingAppender 以后假设配置项里面设置了文件的最大值,那么应该去掉,否则可能不能产生以天为单位的日志。



5)Log4j的org.apache.log4j.DailyRollingFileAppender源代码223行

scheduledFilename = fileName+sdf.format(new Date(file.lastModified()));



也就是说备份的日至文件都是文件名称后面加上你所配的DatePattern格式化后的字符串。除非你自己写个appender。



6)上述log4j.properties生成的日志文件,名称格式例如以下:tomcat_log_2007-02-24.html;

注意:生成的第一个日志文件格式例如以下:tomcat_log_,即仅仅是A1.file中设置的名称;生成的第二个日志文件之后的文件命名才会加上所配的DatePattern格式化后的字符串。



7)配置DailyRollingFileAppender格式的日志系统,假设要验证生成的日志文件结果,要注意一点,须要关闭tomcat,改动系统日期为第二天的日期,再重新启动tomcat,这样才干自己主动生成一个新的日志文件;由于要改动日期才干触发产生新的日志文件。





第四步:重新启动tomcat.



ok,如今就已经在tomcat中配置好log4j了。



第五步:验证



验证上述配置的log4j日志系统:



利用tomcat自带的web应用程序jsp-examples,如今配置好了日志系统,那么假设在jsp-examples这个web应用程序的.java文件里使用了日志,则IE訪问这个web app的jsp文件时,就应该可以自己主动产生日志文件到配置的路径中。



步骤:

a)进入文件夹“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-examples\WEB-INF\classes\dates”;

b)改动JspCalendar.java文件,在这个文件里加上日志的代码,例如以下所看到的:

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);



}

……

}



凝视:

加上的代码有两部分,一是构造一个logger对象,一是输出logger信息,例如以下所看到的,其它代码没动:

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)改动日期为2007-02-26;

e)重新启动tomcat;

f)在IE中输入“http://localhost:8086/jsp-examples/dates/date.jsp”,执行该jsp文件;

g)这时在文件夹“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下看到了新产生的日志文件:tomcat_log_2007-02-25.html.



ok!说明日志系统配置成功啦,啦~!!



三、遗留问题

3.1 上述配置的是tomcat的日志系统,应该是对tomcat下的全部webapp都起作用,如今自己仅仅验证了jsp-examples这个webapp,还没有验证过其它的webapp。



3.2 配置的是tomcat的日志系统,输出的应该都仅仅是tomcat的标准输入/输出信息等,感觉webapp的日志信息应该和tomcat的系统日志信息分开,可是应该怎么分开呢?假设对每一个webapp单独配置日志系统,那么这些日志内容会输出到tomcat的系统日志中吗?



3.3 不需不论什么配置,tomcat5.0的默认日志文件夹“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下就有按日期产生的日志文件,文件命名格式例如以下:localhost_log.2007-02-26.txt,而且这个文件是自己主动生成的,上述配置在文件夹“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下生成了tomcat_log_2007-02-25.html文件,而且tomcat本身也自己主动生成了一个localhost_log.2007-02-26.txt文件,相当于自己主动生成了两个日志文件。

当然这两个日志文件的内容不同,tomcat_log_2007-02-25.html中的内容例如以下:

待贴图



而localhost_log.2007-02-26.txt的内容例如以下:

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()



感觉就是localhost_log.2007-02-26.txt中是tomcat的系统日志,而omcat_log_2007-02-25.html中是.java中自己写的logger的内容。



那么,是不是tomcat5中系统日志就会自己主动按日生成,不需配置;开发者假设须要日志系统,那么就在自己的webapp中配置一个,而不须要管tomcat的系统日志了???



3.4 tomcat_log_2007-02-25.html与localhost_log.2007-02-26.txt内容不同的原因有没有可能是由于:

自己的log4j.properties中设置apache的级别是warn:??

log4j.logger.org.apache=warn



刚验证了一下,好像没有关系,“log4j.logger.org.apache=warn”这句好像不仅对localhost_log.2007-02-26.txt无影响,并且对tomcat_log_2007-02-25.html的输出也无影响。

那么“log4j.logger.org.apache=warn”这句的作用是什么呢???



3.5 webapp中怎样配置日志系统,而且把webapp的日志信息与tomcat自身的系统日志分开???



四、參考资料:

1.我想每一天都产生一个以"yyyy-mm-dd.log"命名日志文件,请问该怎么配置file选项,谢谢了!

http://community.csdn.net/Expert/TopicView3.asp?id=4788993



2.使用log4j为Tomcat输出日志

http://www.chinawin.net/myblog/archives/314-log4jTomcataeoeOE.html



1. 假设Tomcat当前正在执行,关闭Tomcat。

2. 从Apache的站点下载Commons Logging发行包。

3. 将压缩包中的commons-logging.jar解压缩到你Tomcat安装路径的common/lib文件夹中。

4. 从Apache的站点下载Log4j发行包。

5. 将压缩包中的log4j-1.2.12.jar解压缩到你Tomcat安装路径的common/lib文件夹中。

6. 在Tomcat安装路径的common/classes 创建log4j的配置文件log4j.properties(配置文件在随后一节)。

7. 重起Tomcat





3.在Web应用中使用log4j

http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184



注意:上面的load-on-startup应设为1,以便在Web容器启动时即装入该Servlet。log4j.properties文件放在根的properties子文件夹中,也能够把它放在其他文件夹中。应该把.properties文件集中存放,这样方便管理。



4.og4j日志文件路径的配置

http://wangluwww.spaces.live.com/blog/



解决log4j输出的日志文件的位置的配置问题



我一直希望自己的web应用的配置可以简化,最好的方式就是打个包后扔哪都能用,即使非得再做一些配置的话,也希望仅仅是一些连接池的配置信息。这个目标在如今手头的这个项目中也差点儿达到了,除了log文件的位置。

在log4j的配置文件里对于log输出的路径一向都是使用绝对路径,这样就导致在不同的机器上部署时都得又一次定义一下log文件的输出位置。虽说费时不多,可对于我这样的宁可少一事,不愿多一事的人来说,总是认为有点郁闷。

踏破铁鞋无觅,得来不费功夫。不经意见看到了一个文档,介绍说log4j的配置文件支持windows的环境变量,格式类似velocity:${env},ok,问题解决:

一般来说我们会将一些初始化的信息放到web.xml中,以便在系统启动时就执行。循此思路,将log文件的位置放到webapp以下的随意处,如webapp/WEB-INF/conf/logs以下,则能够在log4j.properties文件里做例如以下定义:

log4j.appender.R.File=${webappHome}/WEB-INF/conf/logs/sysout.log

当中的${webappHome}即是通过System.setProperty("webappHome", webappHome);实现的,此操作可通过一初始的servlet进行,详细方法略。



5. Log4j优化

http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184



有多少人用Log4j的时候会在每个Debug/Info之前加一个推断?



可能非常多人都说了,这有什么关系,我在执行的时候是把Log Level设置成Error的。



那么请看以下这个代码:



String result;

...

...

...

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



再看看这个代码:



String result;

...

...

...

if(logger.isDebugEnabled())

{

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

}





把Log Level设置成ERROR,执行结果又差别吗?没有!!

程序的性能有差别吗?差别大了!!!



由于什么呢?



尽管第一段代码也不产生Log输出,可是debug()里面的字符串变量是实例化了,明确了吗?



这个就是为什么非常多人抱怨Log4j占用非常大CPU时间的原因了,尤其是在大循环的时候。



赶快在你的程序中加上这种推断条件吧。

配置Tomcat的日志系统的更多相关文章

  1. 一键配置tomcat定期日志清理功能

    概述 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处理一个单个的 ...

  2. 成功配置TOMCAT的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件

    关于log4j.properties文件在web项目中放的位置,找过很多,最后实践结果是: 一.web项目 二.放在src的目录里面,然后项目生成后会自动在\WEB-INF\classes文件里有份l ...

  3. ELK收集tomcat访问日志并存取mysql数据库案例

    这个案例中,tomcat产生的日志由filebeat收集,然后存取到redis中,再由logstash进行过滤清洗等操作,最后由elasticsearch存储索引并由kibana进行展示. 1.配置t ...

  4. 配置Tomcat使用HTTP/2

    转自: https://zhuanlan.zhihu.com/p/21349186 前情提要: Tomcat高效响应的秘密(一) Sendfile与Gzip Tomcat高效响应的秘密(二) keep ...

  5. 18:django 日志系统

    django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...

  6. tomcat访问日志分析

    常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...

  7. linux系统tomcat项目部署和tomcat访问日志

    一.只用ip地址访问 先把端口号改成80,然后用 <Host name="localhost"  appBase="webapps"    137     ...

  8. Tomcat日志系统详解

    综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...

  9. 《Tomcat日志系统详解》

    综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...

随机推荐

  1. IT痴汉的工作现状16-职业发展

    回首多年来的工作经历.发现自己的职业发展真是太平庸只是了.就像我的名字张伟,平淡无奇.而我,还是几年前刚入职模样的我,仍然像个涉世未深的矛头小子,相信技术能够改变世界.真是一入IT深似海,为伊消得人憔 ...

  2. Unity3D游戏开发之开发游戏带来的问题

    昨日曾就某投资人把移动团队失败原因之中的一个归于选择Unity引擎进行了一番评论,工具本身无罪,但怎样理解工具.正确使用Unity引擎确实须要讨论,在选择Unity之前你也许须要了解下这个引擎实际开发 ...

  3. hdu 1224 Free DIY Tour(最长的公路/dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...

  4. C语言内存对齐

    转:http://blog.csdn.net/embeddedman/article/details/7429976 首先由一个程序引入话题:  1 //环境:vc6 + windows sp2 2  ...

  5. UVa 10188 - Automated Judge Script

    题目:给你一些题目的输出结果,推断是AC,PE还是WA. 分析:模拟. 依照题意模拟就可以,注意PE条件为全部数字字符出现顺序同样就可以. 说明:想起非常多年前写的OJ的后台判题程序了╮(╯▽╰)╭. ...

  6. 盒子游戏(The Seventh Hunan Collegiate Programming Contest)

    盒子游戏 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作.每次操作时,游戏者先看看哪个盒子里的球的数目 ...

  7. jQuery Mobile 是创建移动 web 应用程序的框架。

    jQuery Mobile jQuery Mobile 是创建移动 web 应用程序的框架. jQuery Mobile 适用于所有流行的智能手机和平板电脑. jQuery Mobile 使用 HTM ...

  8. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...

  9. Context Switch and System Call

    How many Context Switches is “normal”? This depends very much on the type of application you run. If ...

  10. 21天教你学会C++