配置Tomcat的日志系统

成功配置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时间的原因了,尤其是在大循环的时候。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python训练词库_在Python中训练NGramModel

首先,正如您对问题的评论中所指出的,如果培训/运行速度对您来说是一个问题,KenLM可能是更好的选择.此时nltk.model主要用于教育/原型设计,但它并不快.如果您仍然决定坚持使用NLTK,请继续阅读.我碰巧是模型分支中新的NgramModel代码的作者,我会尝试清楚地说明你可以测试代码并让…

内推!字节、阿里、网易火热招聘中,内推优筛简历,快人一步拿offer,真香!(送内推码)...

全世界只有3.14 % 的人关注了爆炸吧知识“金三银四”可谓招聘的黄金期。一方面,校园春招正如火如荼的进行中,另一方面,各大企业也纷纷启动了暑假实习招聘。对于2020届的同学来说,务必要利用好“应届生”这个身份,把握住…

如何将10进制转成16进制,又如何将16进制数转成10进制,C#和VB代码?

方法1: int d10; d.ToString("x") //或把x改为X,,,就变成了16位的字符串了. int xConvert.ToInt32(d.ToString("x"),16);/&a…

C#怎么测试静态方法?我给出了2种方案

问题假设有一个方法需要判断当前小时范围&#xff0c;代码如下&#xff1a;public class Class1 {public bool SomeMethod(){var hour DateTime.Now.Hour;if (hour > 9 && hour < 12){return true;}return false;} }但是&#xff0c;在做单元测试时&#xff0c;…

关于Tomcat5.5中EL表达式无效的解决办法

问题&#xff1a; 在Tomcat5.5中&#xff0c;JSP页中使用EL表达式输出信息&#xff0c;例如&#xff1a; <% page language”java” import”java.util.*” pageEncoding”UTF-8″%><html><head>EL表达式</head><body>${header["User-Agent…

c语言全局变量和局部变量问题汇总

1、局部变量是否能和全局变量重名&#xff1f; 答&#xff1a;能&#xff0c;局部会屏蔽全局。要用全局变量&#xff0c;须要使用"::" 局部变量能够与全局变量同名&#xff0c;在函数内引用这个变量时&#xff0c;会用到同名的局部变量&#xff0c;而不会用到全局变…

本科4篇顶会论文如何做到?清华特奖高天宇干货分享:我是这样写论文、做实验、与导师相处...

全世界只有3.14 % 的人关注了爆炸吧知识本科生&#xff0c;距离“科研”有多远&#xff1f;有人还处在“小朋友你是否有很多问号”的状态&#xff0c;但也有人本科就连发顶会文章&#xff0c;光环闪瞎众人。其中可有什么秘诀&#xff1f;清华本科特奖获得者、清华计算机大四学生…

java final 修改_“无法改变的设计”——浅谈Java中的final关键字

在Java中&#xff0c;final关键字可以用来修饰类、变量(包括成员变量和局部变量)、方法&#xff0c;下面从这三个方面分别说明。final方法当一个方法被final修饰时&#xff0c;表明这个方法不能被子类重写。下面程序试图重写final方法&#xff0c;将会引发编译错误。public cla…

数据库日志的说明

清日志 如 dump transaction 数据库名 with no_log --清除日志backup log 数据库名 with no_log --截断事务日志dbcc shrinkdatabase(数据库名,10) --收缩的数据库&#xff0c;空出10%的空间来 先执行上面两句&#xff0c;这两句比较快…

.NET 6 预览版 7 Released

.NET 6 预览版 7 ReleasedRichard 2021 年 8 月 10 日我们很高兴发布 .NET 6 Preview 7。这是我们进入&#xff08;两个&#xff09;发布候选 (RC) 期之前的最后一次预览版本。在我们放慢发布速度之前&#xff0c;团队经常加班夜战来保证最后一组功能。在这个版本中&#xff0c…

孝顺孝顺,孝不如顺

摘自西西河&#xff1a;http://www.ccthere.com/article/3044112&#xff0c;作者&#xff1a;抱朴仙人 刚说到一把年纪还要被老爹教育&#xff0c;忽然发现河里颇有几位难友&#xff0c;呵呵。 话说这个孝道&#xff0c;一直是包括“赡养”和“陪伴”两个方面的&#xff0c;也…

一致性 hash 算法( consistent hashing )

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出&#xff0c;目前在cache 系统中应用越来越广泛&#xff1b; 1 基本场景 比如你有 N 个 cache 服务器&#xff08;后面简称 cache &#xff09;&#xff0c;那么如何将一个对象 obje…

复工之后,如何让自己的时间更值钱

全世界只有3.14 % 的人关注了爆炸吧知识时间最不偏私给任何人都是二十四小时时间也最偏私给任何人都不是二十四小时而如何让自己的时间更值钱以下公众号或许能给你一些启示赶快扫码关注吧&#xff01;RSS精选ID&#xff1a;KindleNewsRSS精选是一个专注于时间管理iOS相关及Kind…

selenium autoit java_Java+Selenium——AutoIt工具处理文件上传

关于文件上传&#xff0c;这边介绍一个第三方工具&#xff0c;叫AutoIt&#xff0c;简单来说&#xff0c;这个是一个能支持桌面GUI自动化的工具&#xff0c;它支持脚本语言编写。这里&#xff0c;我们用AutoIt来做文件上传的演示。在Selenium脚本中如果需要AutoIt来协助这个文件…

Blazor+Dapr+K8s微服务之开发环境调试

1 安装Dapr开发调试环境1.1 Dapr 完整安装模式不支持开发调试在上一篇随笔《BlazorDaprK8s微服务之服务调用》中&#xff0c;我们通过为每个微服务运行dapr run ….dotnet run命令&#xff0c;以自宿主的方式在本地开发环境成功运行了服务调用的例子。但是&#xff0c;这种运行…

也谈cacti整合nagios(centos)

花了近一天的时间整合了cacti和nagios&#xff0c;cacti用来检测运行状态nagios主要用来预警。期间参考了很多网友的文章&#xff0c;在此感谢下&#xff01;在这里记录一下配置过程&#xff0c;以备后忘。。说整合其实只是表面的&#xff0c;cacti和nagios还是以他们原来的方式…

cursor 的moveToFirst和moveToNext和moveToPrevious以及moveToLast

查询出来的cursor的初始位置是指向第一条记录的前一个位置的&#xff0c;cursor.moveToFirst&#xff08;&#xff09;指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的&#xff0c;一…

这10个人,总是牛逼的无话可说

全世界只有3.14 % 的人关注了爆炸吧知识终于迎来知识君最喜欢的工作日了。热爱工作的知识君还是在认真地看书&#xff0c;码字。哈哈哈&#xff0c;有模友知道看得是什么书然而在拍完照片后&#xff0c;还是得想想今晚该写些啥东西。狄拉克 保罗狄拉克(Paul Adrien Maurice …

WebSocket服务器(物联网下行通知神器)

HttpServer是一个轻量级Web服务器&#xff0c;用于在嵌入式设备以及客户端环境中提供简单Web服务&#xff0c;同时也支持标准WebSocket服务。本文例程基于vs2022&#xff0c;基础例程可参考&#xff1a;https://www.yuque.com/smartstone/nx/httpserverWebSocket服务端WebSocke…

SCCM 2007系列教程之三日志文件

Microsoft System Center Configuration Manager 2007 中的所有客户端和站点服务器组件都将过程信息记录在单个日志文件中。您可以使用客户端和站点服务器日志文件中的信息来帮助您诊断在 Configuration Manager 2007 层次结构中可能出现的问题。默认情况下&#xff0c;Configu…