Java 之 Log4J配置详解

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  配置输出方式 输出端Appender
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 = [%-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.FileAppender
log4j.appender.D.File = logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.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.FileAppender
log4j.appender.E.File = logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯共明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值