项目log4j日志管理详解

log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了。如果要自定义输出文件,对于初次使用者可能会遇到一点的小麻烦。最近在项目中刚做了一个统计用户登录的日志文件,要求将用户登录到某个模块的信息输出到login.log中,每天生成一个已日期命名的该类文件,现share出来。

1.Log4j下载

在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。

2.Log4j使用

Log4j的包下载完成后,解压,将其中打包好的的log4j-1.x.x.jar导入你的工程LIB中。 
Log4j之所以受欢迎的原因之一是它的灵活性。Log4j提供了灵活的配置方法,默认是调用BasicConfigurator.configure()来进行配置,但如果只是简单的调用BasicConfigurator.configure()来进行配置工作,那么所有的配置都是固定的,不方便以后修改配置。另一种是动态配置,Log4j提供了PropertyConfigurator.configure(……)来动态配置,参数可以是一个properties文件所在路径的String对象,可以是一个properties文件所在路径的URL对象,也可以是一个properties对象。如果要用XML文件来配置信息,则可用类型的DOMConfigurator()函数来从一个XML文件中加载配置信息。这种方式更方便修改配置。

************************************************

  1. public class Log4jHelloworld {
  2. static Logger log = Logger.getLogger(Log4jDemo.class.getClass());
  3. /**
  4. * main
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. BasicConfigurator.configure();//默认配置
  9. PropertyConfigurator.configure("c:/log4j.properties");
  10. //动态配置,参数可以是一个properties文件所在路径的String对象
  11. //可以是一个properties文件所在路径的URL对象,也可以是一个properties对象
  12. DOMConfigurator.configure("c:/log4j.xml");//XML配置文件
  13. //PropertyConfigurator.configure()的参数还可以是XML、Properties对象
  14. //下面就可使用log4j
  15. log.info("info");
  16. log.debug("debug");
  17. log.error("error");
  18. log.warn("warn");
  19. }
  20. }

*************************************************************

J2EE应用使用Log4j,必须先在启动服务时加载Log4j的配置文件进行初始化,可以在web.xml中进行

*************************************************************

  1. public class J2eeLog4jDemo extends HttpServlet {
  2. public void destroy() {
  3. super.destroy();
  4. }
  5. public void doGet(HttpServletRequest request, HttpServletResponse response)
  6. throws ServletException, IOException {
  7. }
  8. public void doPost(HttpServletRequest request, HttpServletResponse response)
  9. throws ServletException, IOException {
  10. }
  11. public void init() throws ServletException {
  12. //通过web.xml来动态取得配置文件
  13. String prefix = getServletContext().getRealPath("/");
  14. String file = getInitParameter("log4j");
  15. //如果没有给出相应的配置文件,则不进行初始化
  16. if(file != null)
  17. {
  18. PropertyConfigurator.configure(prefix+file);
  19. }
  20. }
  21. }

Web.xml 代码

  1. <servlet-name>j2eelog4jdemoservlet-name>
  2. <servlet-class>J2eeLog4jDemoservlet-class>
  3. <init-param>
  4. <param-name>log4jparam-name>
  5. <param-value>log4j.propertiesparam-value>
  6. init-param>
  7. <load-on-startup>1load-on-startup>  //设为1时,Web容器启动即进行加载
  8. </servlet>

*************************************************************

Spring配置Log4j

Spring中配置Log4j只要配置applicationContext.xml文件,Log4j的配置文件放在Web工程的根目录下,默认是objectname/root下,可以在web.xml中设置工程根目录

*************************************************************

设置根目录

web.xml 代码

  1. <!--不定义webAppRootKey参数,webAppRootKey就是缺省的"webapp.root"-->
  2. <context-param>
  3. <param-name>webAppRootKeyparam-name>
  4. <param-value>webapp.rootparam-value>
  5. context-param>
  1. <!--不定义webAppRootKey参数,webAppRootKey就是缺省的"webapp.root"-->
  2. <context-param>
  3. <param-name>webAppRootKeyparam-name>
  4. <param-value>webapp.rootparam-value>
  5. context-param>

配置applicationContext.xml

applicationContext.xml 代码

  1. <!--由Sprng载入的Log4j配置文件位置-->
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>/WEB-INF/log4j.properties</param-value>
  5. <!--在这里定位配置文件,需要的是从root开始的绝对路径-->
  6. context-param>
  7. <!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
  8. <context-param>
  9. <param-name>log4jRefreshIntervalparam-name>
  10. <param-value>60000param-value>
  11. context-param>
  12. <!--Spring log4j 监听器-->
  13. <listener>
  14. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  15. listener>
  1. <!--由Sprng载入的Log4j配置文件位置-->
  2. <context-param>
  3. <param-name>log4jConfigLocation</param-name>
  4. <param-value>/WEB-INF/log4j.properties</param-value>
  5. <!--在这里定位配置文件,需要的是从root开始的绝对路径-->
  6. </context-param>
  7. <!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
  8. <context-param>
  9. <param-name>log4jRefreshInterval</param-name>
  10. <param-value>60000</param-value>
  11. </context-param>
  12. <!--Spring log4j 监听器-->
  13. <listener>
  14. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  15. </listener>

同时使用commons-logging和Log4j

1)首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类 
2)如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类 
3)否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类 
4)否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类) 
5)否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog

将commons-logging和Log4j的jar包都放置到classpath下,同时也将Log4j的配置文件放到classpath中,两者就可以很好的合作,实现如下:

  1. package com.doctorcom.model;
  2. import org.apache.commons.logging.Log;
  3. public class LogFactorySupport {
  4. public Log getLog(){
  5. Log log = org.apache.commons.logging.LogFactory.getLog(LogFactorySupport.class);
  6. log.info("");
  7. log.debug("");
  8. }
  9. }

Log4j配置内容

看一个简单的java属性配置文件log4j.properties:

properties 代码

  1. #指定根Logger,及日志输出级别,大于等于该级别的日志将被输出( DEBUG < INFO < WARN < ERROR < FATAL ) 设为OFF可以关闭日志
  2. log4j.rootLogger=DEBUG, A1,A2
  3. #指定log输出目的,这里设为输出日志到指定目录的文件my.log中
  4. log4j.appender.A1=org.apache.log4j.FileAppender
  5. log4j.appender.A1.File=//logs//my.log   #当前根目录下
  6. #指定日志信息的格式
  7. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n
  9. #把A2输出到控制台
  10. log4j.appender.A2=org.apache.log4j.ConsoleAppender
  11. log4j.appender.A2.layout=org.apache.log4j.SimpleLayout
  12. #还可以单独指定输出某个包的日志级别
  13. #log4j.logger.com.study.HelloLog4j=INFO
  1. #指定根Logger,及日志输出级别,大于等于该级别的日志将被输出( DEBUG < INFO < WARN < ERROR < FATAL ) 设为OFF可以关闭日志
  2. log4j.rootLogger=DEBUG, A1,A2
  3. #指定log输出目的,这里设为输出日志到指定目录的文件my.log中
  4. log4j.appender.A1=org.apache.log4j.FileAppender
  5. log4j.appender.A1.File=//logs//my.log   #当前根目录下
  6. #指定日志信息的格式
  7. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n
  9. #把A2输出到控制台
  10. log4j.appender.A2=org.apache.log4j.ConsoleAppender
  11. log4j.appender.A2.layout=org.apache.log4j.SimpleLayout
  12. #还可以单独指定输出某个包的日志级别
  13. #log4j.logger.com.study.HelloLog4j=INFO

1、配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName2 
level:日志的级别,指定这条日志信息的重要性。分为ALL < DEBUG < INFO < WARN <error fatal=""></error>一般常用的为 DEBUG , INFO ,WARN ,ERROR四种,分别对应Logger类的四种方法 
debug(Object message ) ; 
info(Object message ) ; 
warn(Object message ) ; 
error(Object message ) ; 
如果设置级别为INFO,则优先级大于等于INFO级别(如:INFO、WARN、ERROR)的日志信息将可以被输出,小于该级别的如:DEBUG将不会被输出 
appenderName :就是指定日志信息输出目的地,比如(打印到控制台,输出到文件等)。同一条日志信息可以配置多个输出目的地。

2、配置log输出目的地

Log4j提供以下几种: 
org.apache.log4j.ConsoleAppender(控制台) 
org.apache.log4j.FileAppender(文件) 
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) 
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) 
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、log信息的格式

org.apache.log4j.HTMLLayout(HTML表格形式) 
org.apache.log4j.SimpleLayout(简单格式的日志,只包括日志信息的级别和指定的信息字符串 ,如:DEBUG - Hello) 
org.apache.log4j.TTCCLayout(日志的格式包括日志产生的时间、线程、类别等等信息) 
org.apache.log4j.PatternLayout(灵活地自定义日志格式)

当使用org.apache.log4j.PatternLayout来自定义信息格式时,可以使用 
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 来格式化信息 
%c    输出所属类的全名,可写为 %c{Num} ,Num类名输出的范围  如:"com.sun.aaa.classB", %C{2}将使日志输出输出范围为:aaa.classB 
%d    输出日志时间其格式为 可指定格式 如 %d{HH:mm:ss}等 
%l    输出日志事件发生位置,包括类目名、发生线程,在代码中的行数 
%n    换行符 
%m    输出代码指定信息,如info(“message”),输出message 
%p    输出日志的优先级,即 FATAL ,ERROR 等 
%r    输出从启动到显示该条日志信息所耗费的时间(毫秒数) 
%t    输出产生该日志事件的线程名

*************************************************************

项目中代码(login.log实现)

log4j.properties

#logger
log4j.rootLogger=INFO,Sout,Opr,Err
log4j.logger.app=Sout
log4j.logger.sys=Sout
#Console
log4j.appender.Sout=org.apache.log4j.ConsoleAppender
log4j.appender.Sout.layout=org.apache.log4j.PatternLayout
log4j.appender.Sout.layout.ConversionPattern= [%d{HH:mm:ss,SSS}] [%p] [%c] - %m%n

#Exception log
log4j.appender.Err=org.apache.log4j.RollingFileAppender
#log4j.appender.Err.File= D:/member_error.log
log4j.appender.Err.File= IEWLog/IEW_error.log
log4j.appender.Err.Threshold = ERROR  
log4j.appender.Err.MaxFileSize=100KB
log4j.appender.Err.MaxBackupIndex=1
log4j.appender.Err.layout=org.apache.log4j.PatternLayout
log4j.appender.Err.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#Operation log
log4j.appender.Opr = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.Opr.File = D:/member_operation.log
log4j.appender.Opr.File = IEWLog/IEW_operation.log
log4j.appender.Opr.Append = true
log4j.appender.Opr.layout = org.apache.log4j.PatternLayout
log4j.appender.Opr.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#自定义Login log appender
log4j.appender.Login = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.Opr.File = D:/member_operation.log
log4j.appender.Login.File = IEWLog/IEW_login.log
log4j.appender.Login.Append = true
log4j.appender.Login.layout = org.apache.log4j.PatternLayout
log4j.appender.Login.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

################################### Noted by chenzhiwu #

#The following properties is for lib-specified log information, 
#for more information, refer to the log4j API and docs.
#you can change the Priority by yourself,but please don't check in.

#log4j.logger.com.hisoft.zmd=debug
#log4j.logger.com.opensymphony.xwork.interceptor=debug

#log4j.logger.org.springframework=debug

#为了减小服务器空间压力将hibernate、webwork和spring框架的日志级别都定为了error
log4j.logger.org.springframework=error
log4j.logger.org.hibernate=error
log4j.logger.org.hibernate.hql.ast.AST=error

log4j.logger.org.hibernate.SQL=error

log4j.logger.org.hibernate.type=error
log4j.logger.org.hibernate.tool.hbm2ddl=error

log4j.logger.org.hibernate.hql=error

### log cache activity ###
log4j.logger.org.hibernate.cache=error
log4j.logger.org.hibernate.loader=error

#自定义login的日志级别和指定日志生成appender

#log4j.logger.+包名和类名
log4j.logger.com.chn.uma.security.web.action.TurnToAction=INFO,Login
log4j.logger.com.chn.uma.security.web.action.LoginAction=INFO,Login

LoginAction.java

/**
 * <p>
 * 验证登录信息.
 * </p>
 * 
 * @author sc
 */
public class LoginAction extends ModelDrivenBaseAction {

//使用默认的appender或其他

private Logger log = Logger.getLogger("");

/**
 * 使用自定义的Login appender<br/>
 *   Logger.getLogger()参数this.getClass映射到属性文件中的<br/>

*   log4j.logger.com.chn.uma.security.web.action.LoginAction=INFO,Login<br/>
 *

*/

private Logger login = Logger.getLogger(this.getClass());

........

}

生成IEW_login.log.2010-10-11和IEW_login.log.txt

IEW_login.log.txt中日志为:

2010-10-13 09:57:05  [ http-8080-1:187658 ] - [ INFO ]  [admin] Login in [OM] module
2010-10-13 10:00:34  [ http-8080-9:396993 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 10:14:10  [ http-8080-5:285736 ] - [ INFO ]  [admin] Login in [OM] module
2010-10-13 10:14:24  [ http-8080-3:299181 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 10:30:33  [ http-8080-2:779416 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 13:43:14  [ http-8080-3:12340532 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 14:05:40  [ http-8080-2:305465 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 14:27:49  [ http-8080-1:139601 ] - [ INFO ]  [admin] Login in [IEW] module
2010-10-13 16:00:58  [ http-8080-3:128085 ] - [ INFO ]  [admin] Login in [IEW] module

转自:http://blog.csdn.net/shengchuang/article/details/5939481

项目log4j日志管理详解的更多相关文章

  1. Spark log4j日志配置详解(转载)

    一.spark job日志介绍    spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...

  2. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  3. MySQL 日志管理详解

    大纲 一.日志分类 二.日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一.日志分类 错误日志 查询日志 慢查询日志 二进制日志 中继日志 事务日志 滚动日 ...

  4. (转)Log4J日志配置详解

    http://www.cnblogs.com/ITtangtang/p/3926665.html 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源 ...

  5. java Log4j日志配置详解大全

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  6. Log4J日志配置详解[转]

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  7. Log4j.properties 属性详解以及 LOG4J日志级别详解

    转自:https://blog.csdn.net/lovely0903jpp/article/details/82261607 假如项目的生产环境上增加请求以及响应信息的打印,这个时候,对于新手来说, ...

  8. LOG4J日志级别详解

    日志记录器(Logger)是日志处理的核心组件. org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 ...

  9. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

随机推荐

  1. win7安装mysql解压缩版

    http://blog.csdn.net/u013067166/article/details/49951577

  2. APNS push server端 SSL3.0 转 TLS (iPhone苹果推送服务)

    (转载此文,请说明原文出处) 苹果的官方公布 Update to the Apple Push Notification Service October 22, 2014 The Apple Push ...

  3. 126. Word Ladder II(hard)

    126. Word Ladder II 题目 Given two words (beginWord and endWord), and a dictionary's word list, find a ...

  4. Python moni模拟鼠标事件

    7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4 ...

  5. java基础篇5之泛型

    1 泛型的基本应用 //反射方式 指定类型,就不用强转 Construcctor<String> constructor = String.class.getConstructor(Str ...

  6. 发送Post的请求代码

    通过浏览器访问的URL请求,都是GET请求,接下来代码是模拟POST发送请求 import java.io.BufferedReader; import java.io.FileNotFoundExc ...

  7. bit、位、byte、字节、B、KB、字符与网速

    一.存储单位bit和Byte 1.bit(比特) bit就是位,也叫比特位,是数据存储的最小单位.简写为小写字母“b” 二进制的一位,每个0或1是一个bit 2.Byte(字节) Byte是字节,也有 ...

  8. VS (Visual Studio) 快捷键

    Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 Ctrl + M + L:  展开所有方法

  9. frame框架及其实例

    框架概念 : 谓框架便是网页画面分成几个框窗,同时取得多个 URL.只需要 <FRAMESET> <FRAME> 即可,面所有框架标记需要放在一个总起的 html 档,这个档案 ...

  10. PM2.5

    http://baike.baidu.com/view/1423678.htm PM2.5是指大气中直径小于或等于2.5微米的颗粒物,也称为可入肺颗粒物.虽然PM2.5只是地球大气成分中含量很少的组分 ...