1.简介2
(1)Log4j是什么?
log4j是一个由Java编写的,可靠、快速和灵活的日志框架(API),它是Apache下的一个开源项目。又是Apache,我表示他们实在是比较强大,很多开源软件都是他们家的。
log4j可以实现对日志信息输送的每一条日志的输出(格式、级别、生成),目的地(控制台、文件、GUI组件、数据库,套接口服务器、NT的事件记录器、UNIX系统日志等)等的控制。
log4j是高度可配置的,并可通过在运行时的外部文件配置。通过一个配置文件来灵活地进行配置,保证日志组件的高度可重用性。
Log4j2官网地址:https://logging.apache.org/log4j/2.x/
(2)Log4j的组成
log4j主要由Loggers,Appenders,Layouts等三部分组成;他们的作用为
logger:决定捕获记录信息。
appender : 决定日志输送首选目的地(控制台,文件等)。
layout: 决定每一条信息的不同格式化风格。
log4j2类图可以表示为
具体而言,log4j2具体有两种类型八种常用的对象,除了上文的三种,其他的五个分别是【1】:
地址为:http://www.yiibai.com/log4j/log4j_architecture.html
1.支持对象:log4j框架的其他重要的对象起到日志框架的一个重要作用:
2.Level对象:级别对象定义的任何记录信息的粒度和优先级。有记录的七个级别在API中定义:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL,他们的优先级。
3.Filter对象:过滤对象用于分析日志信息及是否应记录或不用这些信息做出进一步的决定。Filters决定日志事件能否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).
4.对象渲染器:ObjectRenderer对象是一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的布局对象来准备最后的日志信息。
5.日志管理:日志管理对象管理的日志框架。它负责从一个系统级的配置文件或配置类读取初始配置参数。
(3)log4j历史
log4j1.X已经停止更新了,现在版本为1.2.17吧,
而新出的log4j2.X,已经有2.8.2, 2.9.0了吧。
首先,先谈一下日志的历史,稍微了解了一下。
第一,先说API,有Slf4J-API, jboss-logging以及Apache common-logging-api(前身是Jakarta Commons Logging,JCL);JCL 只提供 log 接口,具体的实现则在运行时动态寻找。 JCL + log4j 搭配,在程序规模变得越来越庞大时,JCL的动态绑定并不是总能成功。而Slf4J静态绑定指定的日志工具,就不会出现这种情况;
第二,再说实现,log4j, logback, common-logging-imp,java-util-logging等,是具体实现框架,里边包含各种实现组件等,是目前主流的日志实现等;
第三,各种从SLF4J到各个实现的适配器了。
用图可以表示为:http://blog.csdn.net/xudan1010/article/details/52890102
2.log4j2的properties实现
IDEA中pom.xml配好后,就不废话了,直接上代码。
(1)log4j2.properties的配置
老规矩,这个也是需要放在resources下的,而且名字也要是“log4j2.properties”,这是默认的,不要更改,propreties配置:
status = error <!--来看我们添加的配置文件log4j2.xml,以Configuration为根节点,
有一个status属性(关闭自身日志输出 status="OFF">),
这个属性表示log4j2本身的日志信息打印级别。如果把status改为TRACE再执行测试代码,
可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。-->
dest = err <!--要么犯错,url,路径等结果输出到strerr中-->
name = PropertiesConfig <!--log4j 2.6 之前和 之后的 配置不同 ,2.6 之后 ,当第一次使用 identifiers 列表时,
不再需要 指定 name。但是如果你要使用多个,仍然要指定。-->
filter.threshold.type = ThresholdFilter
filter.threshold.level = TRACE
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = debug
rootLogger.level = trace
rootLogger.appenderRef.stdout.ref = STDOUT
点击运行原程序,即上一篇博客文提到的,我还是再写一下吧
/***Created by mo
*On 2017/9/13 ***10:46.
******/
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class FirstLog4j2 {
private static Logger logger = LogManager.getLogger("FirstLog4j2");
public static void main(String[] args){
logger.trace("这是trace信息");
logger.debug("这是debug级信息");
logger.info("这是info信息");
logger.warn("这是warn级信息");
logger.error("这是error信息");
logger.fatal("我是fatal信息");
}
}
可能有点小问题,但删掉标注后就好了的
没事的,删掉那些备注就好。
(2)注意事项:
log4j2.properties文件格式可读性比较差,一般复杂情况下不用,一些服务器,数据库(Mongo, redis)的接口,密码什么的放在里边,日志配置什么的还是放在log4j2.xml文件中比较好.
希望对你有所帮助!