Java 之 Log4J配置详解

来源:互联网 发布:淘宝透明泳衣买家秀 编辑:程序博客网 时间:2024/05/16 12:11

Log4J

Log4J是Apache的一个开源的项目。通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。

log4j是一种可靠、快速和灵活的日志框架(api)用Java编写的,log4j是一个用Java编写的流行的日志包。log4j已经移植到C,c++,c#,Perl、Python、Ruby等语言上。


Log4J的组成

Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。

Logger:控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制;

Appenders:指定了日志将打印到控制台还是文件中;

Layout:则控制日志信息的显示格式。


一个简单的使用

导JAR包

maven方式:pom.xml中

<!-- Log4j 日志管理 -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.7.7</version>    </dependency>

因为Log4j依赖于slf4j-log4j12,而又因为maven会把相互依赖的jar包给自动加载出来,所以我们不用写完整。

这里写图片描述

配置log4j.properties文件

在classpath下新建properties文件,命名为log4j.properties

### 设置根logger 是所有Logger的祖先  配置 日志级别 及输出的方式log4j.rootLogger = debug,stdout,D,E#### 控制台studout  配置输出方式 输出端Appenderlog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n#   如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern### 输出DEBUG 级别以上的日志到=logs/debug.log ###log4j.appender.D = org.apache.log4j.FileAppenderlog4j.appender.D.File = logs/debug.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 输出ERROR 级别以上的日志到=logs/error.log ###log4j.appender.E = org.apache.log4j.FileAppenderlog4j.appender.E.File = logs/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 

配置文件详解

Appender 输出端

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

Layout 输出方式

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

ConversionPattern 打印信息的具体格式

####################################################################    打印信息的具体格式 layout.ConversionPattern#   -X号: X信息输出时左对齐;#   %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,#   %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921#   %r: 输出自应用启动到输出该log信息耗费的毫秒数#   %c: 输出日志信息所属的类目,通常就是所在类的全名#   %t: 输出产生该日志事件的线程名#   %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)#   %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。#   %%: 输出一个"%"字符#   %F: 输出日志消息产生时所在的文件名称#   %L: 输出代码中的行号#   %m: 输出代码中指定的消息,产生的日志具体信息#   %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"###############################################################

测试案例

package com.wm.Java.Log4j;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class Log4J {    private static Logger logger = Logger.getLogger(Log4J.class);    public static void main(String[] args){        // 加载配置文件(如果log4j.properties没有在默认位置,则可以用此方式加载-路径可以任意)        PropertyConfigurator.configure("config/log4j.properties");        logger.debug("debug level ..... ");        logger.info("info level .... ");        logger.warn("warn level ...... ");        logger.error("error level ..... ",new RuntimeException());    }}

测试结果

控制台的显示:是根据设置的格式显示的

这里写图片描述

日志文件保存位置:工程目录/logs/…..

这里写图片描述


日志级别

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。

日志级别从高到低分为:

  • A:off 最高等级,用于关闭所有日志记录。

  • B:fatal 指出每个严重的错误事件将会导致应用程序的退出。

  • C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

  • D:warm 表明会出现潜在的错误情形。

  • E:info 一般和在粗粒度级别上,强调应用程序的运行全程。

  • F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

  • G:all 最低等级,用于打开所有日志记录。


上面这些级别是定义在org.apache.log4j.Level类中。

Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。

例如,如果使用b了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。


Logger对象的获取

Logger被指定为实体,由一个String类的名字识别。Logger的名字是大小写敏感的,且名字之间具有继承关系,子名用父名作为前缀,用点“.”分隔,例如x.y是x.y.z的父亲。

root Logger(根Logger):是所有Logger的祖先,它有如下属性:

1、它总是存在的。
2、它不可以通过名字获得。

public static Logger logger = Logger.getRootLogger();或:public static Logger logger = Logger.getLogger(Class clazz);
1 0