成功配置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. MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

    HeidiSQL 是一款用于简单化的 MySQL server和数据库管理的图形化界面.该软件同意你浏览你的数据库,管理表,浏览和编辑记录,管理用户权限等等.此外,你能够从文本文件导入数据,执行 SQ ...

  2. haproxy 中的http请求和https请求

    use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Encode; no strict; use JSON; # /foo ...

  3. Android万能适配器base-adapter-helper的源代码分析

    项目地址:https://github.com/JoanZapata/base-adapter-helper 1. 功能介绍 1.1. base-adapter-helper base-adapter ...

  4. 2014 CSDN博文大赛终于获奖名单发布

    博文大赛第二阶段(2014年7月15日-2014年8月10日)已经结束,决赛获奖名单已在8月11日出炉. 现将获奖名单发布: 移动开发 NO.1    罗升阳    Luoshengyang    S ...

  5. oracle动态注冊參数local_listener

    local_listener參数有两种书写格式,提供了不同的功能. 监听文件上,1521和1526port上都有动态监听port. [oracle@dbsv admin]$ cat listener. ...

  6. hdu3853(概率dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题意:有一个人被困在一个 R*C(2<=R,C<=1000) 的迷宫中,起初他在 ( ...

  7. Cocos2d-x v3.0正式版尝鲜体验【3】 Label文本标签

    Cocos2d-x在新版本号中增加了新的Label API.和以往不同的是,2.x的版本号是通过三个不同的类来创建不同的文本标签,而如今是模仿着精灵的创建方式.一个类创建不同形式的文本,只是核心内容还 ...

  8. Android的内存优化

    腾讯公司在五月三十一日开展[腾讯Bugly移动开发人员沙龙]大会.大会上面叶方正老师解说了 关于Android的内存优化的问题,只是我感觉叶老师许多其它的站在了測试的角度上去解释了这一方面,叶老师给我 ...

  9. Django写的投票系统2(转)

    在上一篇中 django实例:创建你的第一个应用投票系统(一) 已经介绍基本的功能,并已经启动服务了.这一节介绍数据库相关的东东. 首页打开mysite/settings.py配置文件, 设置数据库打 ...

  10. 《Linux命令行与shell脚本编程大全》 第十六章 学习笔记

    第十六章:创建函数 基本的脚本函数 创建函数 1.用function关键字,后面跟函数名 function name { commands } 2.函数名后面跟空圆括号,标明正在定义一个函数 name ...