log4J日志文件

20 篇文章 0 订阅

日志处理是每一个项目开发中必须的功能,日志是在程序运行时在其他文件中记录的运行信息。

在应用程序中输出日志有三个目的:

1     监视代码中变量的变化情况,把数据周期性地记录到文件中供其他应用进行统计分析工作。

2     跟踪代码运行时轨迹,作为日后审计的依据。

3     担当集成开发环境中的调试器,向文件或控制器打印代码的调试信息。

用户可以自由地选择实现日志接口的第三方软件,比如:Log4J、NoOpLog、SimpleLog等都是通用日志包的实现。

日志文件作用:是一个记录器,用于记录程序运行过程中的各种信息。

日志配置:主要设置记录的级别、存放位置和显示信息的布局。可以使用log4j.properties或log4j.xml格式进行配置。

log4j.properties:

加载log4j.properties步骤:

1:将log4j的jar包放到lib目录下

2:将log4j.properties文件放到src目录下

3:在类中导入类import org.apache.log4j.Logger;

4:在类中定义对象Logger logger = Logger.getLogger(this.getClass());

5:使用logger输出日志logger.info(string);

Apache通用日志包(Log4J,下载地址:http://logging.apache.org/log4j)是Apache的一个开源代码项目,它提供了一组通用的日志接口,通用日志包中的两个常用接口是LogFactory和Log。

通用日志包把日志消息分为六种级别:

FATAL(致命级别)、ERROR(错误级别)、WARN(警告级别)、INFO(一般信息)、DEBUG(调试信息)和TRACE(跟踪信息)。

其中FATAL级别最高,TRACE级别最低,通用日志包采用日志级别机制,可以灵活的控制输出的日志内容。

org.apache.commons.logging.Log接口提供如下方法输出不同级别的日志。

方法名称

说明

fatal(Object message)

输出FATAL级别的日志消息

error(Object message)

输出ERROR级别的日志消息

warn(Object message)

输出WARN级别的日志消息

info(Object message)

输出INFo级别的日志消息

debug(Object message)

输出DEBUG级别的日志消息

trace(Object message)

输出TRACE级别的日志消息

Log4j允许我们控制日志信息输送的目的地,可以是控制台、文件、GUI组件、UNIX Syslog守护进程等;也允许我们控制每一条日志的输出格式;通过定义每一条日志信息的级别(fatal,error,warn,info,debug),我们能够更加细致地控制日志的生成过程。同时,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

Log4J配置文件内容主要由三大组件构成:

①  Logger:负责生成日志,并能根据配置的日志级别来决定什么日志消息应该被输出,比指定级别高的日志信息都能够输出,比如指定日子级别为INFO,那么INFO、WARN、ERROR、FATAL日志都能够输出。

②  Appender:定义日志消息输出的目的地,指定日志消息应该被输出到什么地方,可以是控制台、文件或者网络设备。

③  Layout:指定日志消息的输出格式。

Log4J的配置文件有两种格式,一种是xml文件,一种是properties文件。下面采用properties文件的形式进行日志配置。定义配置文件名为log4j.properties,放置在classes目录下。


1     配置Logger组件

配置Logger组件的语法:

格式:
#log4j.rootLogger=日志级别,Appender名称1, Appender名称2,…
说明:
a、级别分别是:fatal > error > warn > info > debug > trace
b、存放位置列表使用逗号进行分隔,分别是存放变量的说明(在下面配置输出目的地时需要引用)
注意:
如果级别是info,则大于等于info的才记录,比info级别低的不记录(其他级别类似)。

#其中日志级别可以是前面定义的六种级别中的一种,Appender名称可以是任何合法的标示符。

#可以是一个,也可以是多个,下面配置的日志级别是INFO,Appender名称分别是A1和R: 

代码:log4j.rootLogger=INFO, A1 ,R


2    针对Logger的Appender进行配置,配置日志消息输出目的地Appender,其语法是:

格式:
log4j.appender.存放位置变量 = 存放位置类的完全限定名(一般由log4j组件提供)① 
log4j.appender.存放位置变量.属性 = 属性值
说明:
a、log4j提供了几种与存放位置对应的类
1、org.apache.log4j.ConsoleAppender(控制台)
2、org.apache.log4j.FileAppender(文件)
3、org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
4、org.apache.log4j.RollingFileAppender(文件到达一定尺寸时,则产生一个新的文件)
5、org.apache.log4j.WriterAppender(日志流,可以日志消息以流格式发送到任何指定的地方)
b、File属性
可以设置输出的具体文件名
c、Threshold属性
可以设置输出的级别

代码: 

log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=c:/log4j.htm  ②

①  Log4J提供的Appender类有以下几种:如:上a。

②  将日志输出到C:/log4j.htm文件中


3     配置Layout组件

配置Layout组件的语法:

格式:
log4j.appender.存放位置变量.layout = 布局类的完全限定名(一般由log4j组件提供)① 
log4j.appender.存放位置变量.layout.属性 = 属性值
说明:
a、log4j提供了几种与布局对应的类
1、org.apache.log4j.HTMLLayout(以html表格形式布局)
2、org.apache.log4j.PatternLayout(按指定的模式进行布局,通过设置属性可以灵活的指定布局模式)
3、org.apache.log4j.SimpleLayout(简单的布局,包含了级别和信息字符串)
4、org.apache.log4j.TTCCLayout(包含时间、线程、类别等信息的布局)
b、布局中ConversionPattern属性的参数:

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

#例如:

log4j.appender.A1.layout=org.apache.log4j.HTMLLayout

log4j.appender.R.layout.ConversionPattern=%-d{HH:mm:ss} [%c]-[%p] %m%n ②

在Tomcat中,自带通用日志接口包(commons-logging.jar),并且只要在classes目录下存在log4J.properties文件就会自动的加载Log4J的配置信息。通过自带通用日志包引导Log4J进行日志输出。因此不需要配置通用日志接口,通用日志接口配置文件应该放在/WEB-INF/classes目录下,文件名为:commons-logging.properties,配置代码如下:

配置通用日志包的语法:#org.apache.commons.logging.Log=实现类全限定名

例如:

#比如,Log4J的实现类是:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog

☆:在程序中使用Log4J可以通过自身的API,也可以使用通用日志包接口进行访问。

//通用日志包使用

//导入:org.apache.commons.logging.Log

//导入:org.apache.commons.logging.LogFactory

Log log=LogFactory.getLog(this.getClass());

log.debug("debug........");

log.info("info..........");

 

//Log4J自身API使用

//导入org.apache.log4j.Logger

Logger logger = Logger.getLogger (this.getClass());

logger.debug("debug........");

logger.info("info..........");常用的配置:
配置1:
#配置根:og4j.rootLogger=DEBUG,A1,R
#配置控制台输出:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
#配置每天一个日志文件:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=blog_log.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
配置2:
log4j.rootLogger=DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
################### 
# 控制台配置
################### 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.Threshold=DEBUG 
log4j.appender.CONSOLE.Target=System.out 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[日期]%n%p[级别]%n%x[循环诊断环境]%n%t[线程] n%c[类]%n%m[消息]%n%n
##################### 
# 文件配置
##################### 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=file.log 
log4j.appender.FILE.Append=false 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
######################## 
# 每天一个日志文件的配置 
######################## 
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold=ERROR 
log4j.appender.ROLLING_FILE.File=rolling.log 
log4j.appender.ROLLING_FILE.Append=true 
log4j.appender.ROLLING_FILE.MaxFileSize=10KB 
log4j.appender.ROLLING_FILE.MaxBackupIndex=1 
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
######################## 
# 邮件配置 (需要JavaMail和JAF的支持)
####################### 
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL.Threshold=FATAL 
log4j.appender.MAIL.BufferSize=10 
log4j.appender.MAIL.From=iambenbenchen@163.com
log4j.appender.MAIL.SMTPHost=mail.163.com 
log4j.appender.MAIL.Subject=Log4J 消息 
log4j.appender.MAIL.To=iambenbenchen@163.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
######################## 
# 数据库配置(mysql,注意:每行之后不能有空格,否则报错)
####################### 
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test 
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver 
log4j.appender.DATABASE.user=root 
log4j.appender.DATABASE.password= root
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') 
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
示例代码:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;

public class LoginAction{

Log log=LogFactory.getLog(this.getClass());
Logger logger = Logger.getLogger (this.getClass());


public void method(){
log.info(userInfo.getUserInfo().getUserName()+ " log_info开始登陆");
logger.info(userInfo.getUserInfo().getUserName()+ " logger_info开始登陆");
}
}

 public class LoginServlet extends HttpServlet{

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

...

Logger logger=Logger.getLogger(this.getClass());
logger.info(name+"开始登录");

...

logger.info(name+"登录失败"+e.getMessage());

...

logger.info(name+"登录成功");

...

}

}

log4j.properties文件:

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

#定义一个名字为file的Appender,它的类型是RollingFileAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender
#设置最大文件尺寸为1MB,当日志文件大小达到1MB时,开始备份到备份文件中
log4j.appender.file.MaxFileSize=1MB
#设置备份文件的最大数目为1024个文件,超过1024将自动删除最旧的文件
log4j.appender.file.MaxBackupIndex=1024
#指定file Appender输出的日志文件的名字和存放路径。
log4j.appender.file.File=D\:/salog4j.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%-5p] %m%n%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, file

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=trace

### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

 


log4j.xml配置文件设置

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender class="org.apache.log4j.DailyRollingFileAppender" name="rollingFile">
<param name="DatePattern" value=".yyyy-MM-dd"/>
<param name="File" value="c:\log\log.log"/>
<param name="Encoding" value="GBK"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %-5c{3}:%L %X{client} -&gt; %m%n"/>
</layout>
</appender>
<logger name="com.lovebay">
<level value="DEBUG"/>
</logger>
<logger name="org.hibernate.SQL">
<level value="DEBUG"/>
</logger>
<!--
<logger name="org.springframework">
<level value="DEBUG"/>
</logger>
-->
<root>
<level value="INFO"/>
<appender-ref ref="rollingFile"/>
</root>
</log4j:configuration>
————————————————————————————————————————————————

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  4. <!-- 类似定义logger节点打印具体类,或某包中的指定级别以上日志 -->
  5. <logger name="common.TestLog4j">
  6. <level value="debug" />
  7. [color=red]<appender-ref ref="console" />[/color]
  8. </logger>
  9. <!-- 和logger节点功能差不多,打印具体类,或某包中的指定级别以上日志
  10. <category name="common.TestLog4j">
  11. <priority value="warn"/>
  12. </category>
  13. -->
  14. <appender name="console" class="org.apache.log4j.ConsoleAppender">
  15. <!--param name="Threshold" value="INFO" 为打印logger 去掉Threshold参数配置 /-->
  16. <layout class="org.apache.log4j.PatternLayout">
  17. <param name="ConversionPattern"
  18. value="【AppLog】 %d{ABSOLUTE} %-5p %m%n" />
  19. </layout>
  20. </appender>
  21. <appender name="file"
  22. class="org.apache.log4j.DailyRollingFileAppender">
  23. <param name="File" value="log.txt" />
  24. <!--日志过滤门槛,记录warn以上级别日志 -->
  25. <param name="Threshold" value="WARN" />
  26. <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
  27. <layout class="org.apache.log4j.PatternLayout">
  28. <param name="ConversionPattern" value="%d %-5p %m %n" />
  29. </layout>
  30. </appender>
  31. <root>
  32. <!-- root 整体设置过滤优先级,如果appender 没有设置filter或Threshold 默认采用该级别,定义的logger不在其中(即不会被过滤掉)。 -->
  33. <priority value="INFO" />
  34. <appender-ref ref="console" />
  35. <appender-ref ref="file" />
  36. </root>
  37. </log4j:configuration>

————————————————————————————————————————————————

jbosshibernate启动时总是会写入一堆日志信息到

 D:\jboss-4.0.2\server\default\log\server.log中,导致启动的时候速度比较慢,修改应用程序的log4j.properties的配置也不起作用,后来发现修改log4j.xml的配置可以屏蔽这些输出信息,提高启动速度

2. Log4j.xml配置文件内容具体的配置:

·         <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

 

<!-- ===================================================================== -->

<!--                                                                       -->

<!--  Log4j Configuration                                                  -->

<!--                                                                       -->

<!-- ===================================================================== -->

 

<!-- $Id: log4j.xml,v 1.26.2.2 2005/03/02 14:52:20 tdiesler Exp $ -->

 

<!--

   | For more configuration infromation and examples see the Jakarta Log4j

   | owebsite: http://jakarta.apache.org/log4j

 -->

 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

 

   <!-- ================================= -->

   <!-- Preserve messages in a local file -->

   <!-- ================================= -->

 

   <!-- A time/date based rolling appender -->

 

   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">

      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

      <param name="File" value="${jboss.server.home.dir}/log/server.log"/>

      <param name="Append" value="false"/>

 

      <!-- Rollover at midnight each day -->

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

 

      <!-- Rollover at the top of each hour

      <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>

      -->

<!—默认没有这两行,加上可以屏蔽输出调试信息到server.log中,提高启动速度-->

 

       <param name="Target" value="/System.out"/>

 

      <param name="Threshold" value="ERROR"/>

 

 

      <layout class="org.apache.log4j.PatternLayout">

         <!-- The default pattern: Date Priority [Category] Message\n -->

         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

 

         <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n

         <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>

          -->

      </layout>

   </appender>

 

   <!-- A size based file rolling appender

   <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">

     <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

     <param name="File" value="/${jboss.server.home.dir}/log/server.log"/>

     <param name="Append" value="false"/>

     <param name="MaxFileSize" value="500KB"/>

     <param name="MaxBackupIndex" value="1"/>

 

     <layout class="org.apache.log4j.PatternLayout">

       <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

     </layout>     

   </appender>

   -->

 

   <!-- ============================== -->

   <!-- Append messages to the console -->

   <!-- ============================== -->

 

   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">

      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

<!—配置是否输出各种级别的信息到控制台à

 

      <param name="Target" value="/System.out"/>

 

      <param name="Threshold" value="ERROR"/>

 

 

      <layout class="org.apache.log4j.PatternLayout">

         <!-- The default pattern: Date Priority [Category] Message\n -->

         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>

      </layout>

   </appender>

 

  ……

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值