关闭

Log4j类详解(org.apache.log4j.Logger)

标签: log4jjava
822人阅读 评论(0) 收藏 举报
分类:

Log4j的配置

        1、新建Java Project>>新建package>>新建java类;

        2、下载log4j的jar包,导入到java项目;

        3、新建log4j.properties,置于project根目录下;

        4、在main()中,加载log4j:PropertyConfigurator.configure("bin/log4j.properties");

        5、写个小程序测试下。


log4j.properties:

#可以设置级别:debug>info>error 
#debug:显示debug、info、error 
#info:显示info、error 
#error:只error 
log4j.rootLogger=debug,appender1 
#log4j.rootLogger=info,appender1 
#log4j.rootLogger=error,appender1 
 
#输出到控制台 
log4j.appender.appender1=org.apache.log4j.ConsoleAppender 
#样式为TTCCLayout 
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

Main.java:

package com.zxt.logger;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
 
public classLog4jTest {
   
    public static void main(String[] args) {
        PropertyConfigurator.configure("bin/log4j.properties");
       
        Loggerlog = Logger.getLogger(Log4jTest.class);
       
        log.warn("yes yes yes~~~");
    }
}


定义配置文件

         通过配置文件可知,我们需要配置的主要包括这3个方面的内容:

        1、日志信息的优先级别;

        2、日志输出的目的地(控制台、文件等等);

        3、日志输出的样式。

        Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。


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

  log4j.rootLogger = [ level ] , appenderName,appenderName, …

  其中,level是日志记录的优先级,分为OFFFATALERRORWARNINFODEBUGALL或者你自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName就是指日志信息输出到哪个地方。您可以同时指定多个输出目的地。


2、配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台);
org.apache.log4j.FileAppender(文件);
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件);
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件);
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方);
org.apache.log4j.JDBCAppender(将日志信息保存到数据库中)。


3、配置日志信息的格式(布局),其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN

其中,Log4j提供的layout有以e几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局);
org.apache.log4j.PatternLayout(可以灵活地指定布局模式);
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串);
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)。

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r:输出自应用启动到输出该log信息耗费的毫秒数
%c:输出所属的类目,通常就是所在类的全名
%f: 输出日志信息所属的类的类名
%t:输出产生该日志事件的线程名
%n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)。

在代码中使用Log4j

1、得到记录器

  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  public static Logger getLogger(String name)

       通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  static Logger logger =Logger.getLogger ( ServerWithLog4j.class.getName () )


2、读取配置文件

   当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

   1BasicConfigurator.configure():自动快速地使用缺省Log4j环境。

        2PropertyConfigurator.configure ( String configFilename):读取使用Java的特性文件编写的配置文件。

示例:

Propertiesprop = new Properties();
prop.setProperty("log4j.rootLogger","DEBUG, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE","org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.CONSOLE.layout","org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern","%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n");
PropertyConfigurator.configure(prop);

         3DOMConfigurator.configure ( String filename ):读取XML形式的配置文件。

示例:

<?xmlversion="1.0" encoding="UTF-8"?> 
<!DOCTYPElog4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">
    <appendername="appender1" 
       class="org.apache.log4j.RollingFileAppender"> 
        <param name="File"value="logfile08.html" /> 
        <param name="MaxFileSize"value="1MB" /> 
        <paramname="MaxBackupIndex" value="5" /> 
        <layoutclass="org.apache.log4j.HTMLLayout"> 
        </layout>
    </appender>
    <root>
       <level value="debug" />
        <appender-refref="appender1" />
    </root>
</log4j:configuration>

        PropertyConfigurator.configure("bin/log4j.properties"):读取properties形式的配置文件。

示例:

#省略根,只设置特定包的级别和目的地 
log4j.logger.com.coderdream.log4j=debug,appender1 
log4j.logger.com.coderdream.log4jDao=info,appender1,appender2 
 
#输出到控制台 
log4j.appender.appender1=org.apache.log4j.ConsoleAppender 
#设置输出样式 
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout 
#自定义样式 
#%r 时间 0 
#%t 方法名 main 
#%p 优先级DEBUG/INFO/ERROR 
#%c 所属类的全名(包括包名) 
#%l 发生的位置,在某个类的某行 
#%m 输出代码中指定的讯息,如log(message)中的message 
#%n 输出一个换行符号 
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/ddHH:mm:ss:SSS}][%C-%M] %m%n 
 
#输出到文件(这里默认为追加方式) 
log4j.appender.appender2=org.apache.log4j.FileAppender 
#设置文件输出路径 
#【1】文本文件 
log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log 
#设置文件输出样式 
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout 
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M]-%m%n 


log4j.properties

# 此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名
# 如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示
log4j.rootLogger = info, stdout, R


# 此句为定义名为stdout的输出端是哪种类型
# org.apache.log4j.ConsoleAppender(控制台),
# org.apache.log4j.FileAppender(文件),
# org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
# org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
# org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j.appender.stdout = org.apache.log4j.ConsoleAppender

# 此句为定义名为stdout的输出端的layout是哪种类型
# org.apache.log4j.HTMLLayout(以HTML表格形式布局),
# org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
# org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
# org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
# 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern
# [QC]是log信息的开头,可以为任意字符,一般为项目简称。
# %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.stdout.layout.ConversionPattern = [ZXTBlog] %d %-5p [%t] %c | %m%n
log4j.logger.org.sql2o = debug


# write to file
# 定义名为R的输出端的类型为每天产生一个日志文件。
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
# Append = FALSE:默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容 
log4j.appender.R.Append=true
# 此句为定义名为R的输出端的文件名
log4j.appender.R.File=logs/zxtblog.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[Blog] %d %-5p [%t] %c | %m%n


3、插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕,你就可以轻松地使用不同优先级别的日志记录语句插入到你想记录日志的任何地方,其语法如下:

Logger.debug ( Objectmessage ) ;
Logger.info ( Object message) ;
Logger.warn ( Object message) ;
Logger.error ( Objectmessage ) ;

1
0
查看评论

[log4j]org.apache.log4j.Logger用法

Log4j(日志)的简介与使用
  • Azi_mi
  • Azi_mi
  • 2017-04-03 23:58
  • 3075

apache common-logging 和 log4j的相关说明

待补充
  • u011643473
  • u011643473
  • 2014-11-01 16:46
  • 1014

【报错】ClassNotFoundException: org.apache.log4j.Level

【报错】 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level     at org.slf4j.LoggerFactory.bin...
  • u013630349
  • u013630349
  • 2016-06-28 17:28
  • 3963

java.io.NotSerializableException: org.apache.log4j.Logger

storm整合kafka和hbase 查看maven dependencies,看项目引用日志jar如下: log4j-1.2.17.jar logback-classic-1.0.6.jar logback-core-1.0.6.jar slf4j-api-1.7.5.jar ...
  • wushifanwuxiao
  • wushifanwuxiao
  • 2014-11-04 11:45
  • 2674

maven下log4j的配置

1、在pom.xml加入这些dependency; org.slf4j slf4j-api 1.6.6 org.slf4j slf4j-log4j12 1.6.6 log4j log4j 1.2.16 然后会发现de...
  • u011860731
  • u011860731
  • 2015-05-23 11:00
  • 18019

atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的

atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的      1.&#...
  • attilax
  • attilax
  • 2015-02-01 14:22
  • 2139

org.apache.log4j.logger详解

1. 概述 1.1. 背景       在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。  ...
  • zhanghaipeng1989
  • zhanghaipeng1989
  • 2014-10-16 20:56
  • 361

org.apache.log4j.Logger详解

org.apache.log4j.Logger 详解 1. 概述 1.1. 背景       在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹...
  • lihushiwoa
  • lihushiwoa
  • 2013-12-14 22:26
  • 339

java.lang.ClassNotFoundException: org.apache.log4j.Logger from [Module "deployment.itoo-basic-cours

java.lang.ClassNotFoundException: org.apache.log4j.Logger from [Module "deployment.itoo-basic-coursearrangement-ear.ear.itoo-...
  • tsj11514oo
  • tsj11514oo
  • 2017-01-31 21:50
  • 924

Java 日志管理最佳实践 org.apache.log4j.spi.Filter

日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发 人员迅速地定位错误的根源。对于开 发人员来说,在程序中使用日志API记录日志并不复杂,不过遵循一些最佳实践 可以更好的利用日志。本文介绍了在Java程序中记录日志的最佳实践,同时也 介绍了如何...
  • dingxingmei
  • dingxingmei
  • 2014-12-16 20:13
  • 2843
    个人资料
    • 访问:179856次
    • 积分:2950
    • 等级:
    • 排名:第14157名
    • 原创:137篇
    • 转载:28篇
    • 译文:0篇
    • 评论:17条
    博客专栏
    最新评论