关于log4j.properties文件在web项目中放的位置,找过很多,最后实践结果是:

一、web项目

二、放在src的目录里面,然后项目生成后会自动在\WEB-INF\classes文件里有份log4j.properties,用于发布

三、同时在web.xml里加了这个

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

配置项

成功配置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的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件的更多相关文章

  1. 让用户输入一个日期字符串,将其转换成日期格式, 格式是(yyyy/MM/dd,yyyyMMdd,yyyy-MM-dd)中的一种, 任何一种转换成功都可以; 如果所有的都无法转换,输出日期格式非法。

    第三种方法 while(true) {             Date d;        System.out.println("正在进行第一次匹配,请稍后~—~");     ...

  2. Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable

    最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...

  3. C# 时间格式 yyyy/mm/dd

    今天遇到个问题在C#中将日期格式设置为yyyy/MM/dd,我是这样写的: DateTime.Now.ToString("yyyy/MM/dd"); 可是获取到的日期还是显示yyy ...

  4. 这里有个坑---js日期格式yyyy-MM-dd与yyyy/MM/dd

    这里有个坑,---------每一个遇到的坑总结后都是一比财富. 我们写脚本的时候,一般定义一个日期格式会使用“2015-12-21”和“2015/12/21”两种数据格式,由于各取所需日期格式并没有 ...

  5. 数据库中取出YYYY-mm-dd H:i:s的数据怎么将其转化成YYYY/mm/dd格式,另外,怎么将一个数据表中的数据插入另一个数据表

    sql语句是select  left(replace(rq,'-','/'),10) as rq from 表名 tp5.1中的写法 $res = Db::table('表名') ->field ...

  6. js 时间YYYY-MM-DD转换为YYYY/MM/DD 自定义函数格式

    <script type="text/javascript">         window.onload = function () {             va ...

  7. 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)

    let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime();

  8. 配置Tomcat的日志系统

    成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件 一.引言: 实习单位让用log4j配置webapp的日志系统,要求产生的日志文件是html格 ...

  9. 日志工具全面理解及配置应用---以Log4j例子

    一.日志系统基本常识 1.日志系统作用:将日志信息输出到控制台和文本文件,以追踪代码运行信息. 2.日志系统操作的是什么?日志系统打印信息,也是调用日志系统的log.Info(),log.Warn() ...

随机推荐

  1. Sublime for MacOS 使用技巧

    1.创建软链接,使用命令直接打开sublime编辑器 ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/sub ...

  2. python 日志模块工具类

    #!/usr/bin/env python # -*- coding: utf-8 -*- import logging # logName 日志中的某个格式化的字段名,logFile生成的日志文件名 ...

  3. 在sql server数据库可以插入在回车的数据

    insert into t_FamilyClass (id,ParentId,Name) values(111,111,'111')可以在编辑模式下copy到editplus中,设置 显示 空白字符: ...

  4. 杨辉三角的Python实现

      杨辉三角的Python实现 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Python生成器实现杨辉三角: # python def yanghui_tr ...

  5. kali linux之主动信息收集(三层发现,四层发现)

    三层发现: 比二层发现的优点即可路由,就是速度比二层慢,相对我们来说还是算快的,经常被边界防火墙过滤 ip icmp协议 OSI七层模型

  6. HDU6299-2018ACM暑假多校联合训练1002-Balanced Sequence

    这个题的题意是给你n个字符串,认定()是一种平衡的串,两个以上连续的()()也是一种平衡的串,如果一对括号里面包含一个平衡的串,这个括号也被算在这个平衡的串之内, 如(()(()))是一个长度为8的平 ...

  7. 1. Shell编程第一讲

    (1)shell 历史: Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称为批处理( ...

  8. Linux系统管理之硬盘管理

    硬盘是计算的重要组成部件之一,硬盘为操作系统提供持久话存储的功能,在Linux硬盘设备的性能和好坏可能关系到生成线的安全和用户体验等等.熟练的掌握硬盘管理相关的信息能让我们处理起这些问题来得心应手. ...

  9. 关于 SimpleMembership 中 CreateDate 的问题

    使用 WebMatrix.WebData.WebSecurity.CreateUserAndAccount(model.UserName, model.Password,                ...

  10. JS中Math函数的常用方法

    Math 是数学函数,但又属于对象数据类型 typeof Math => ‘object’ console.dir(Math) 查看Math的所有函数方法. 1,Math.abs() 获取绝对值 ...