log4j2是log4j的一个升级版,与log4j1相比进行了很大的改善,同时也修复了一些logback的架构上的问题。所以是目前应用开发的首选的日志器(下载位置:http://apache.fayea.com/logging/log4j/2.8/apache-log4j-2.8-bin.zip )。

下载后log4j2的二进制包解压后,可以看到里面主要包含以下jar文件(以2.8的版本为例):

  • log4j-1.2-api-2.8.jar
  • log4j-api-2.8.jar
  • log4j-core-2.8.jar
  • log4j-jcl-2.8.jar
  • log4j-slf4j-impl-2.8.jar
  • log4j-to-slf4j-2.8.jar
  • log4j-web-2.8.jar

  先大致介绍下上述各个jar包的作用,开发普通JAVA项目时,只需依赖log4j-core-2.8.jar和log4j-api-2.8.jar  ,

开发web项目时还需要多依赖log4j-web.2.8.jar这个包。

log4j-slf4j-impl-2.8.jar和log4j-to-slf4j-2.8这两个jar用于适配slf4j这个日志门面框架,

log4j-jcl-2.8.jar用于适配commons-logging框架

log4j-1.2-api-2.8.jar用于log4j1.2版本的升级,用这个jar替换原有的log4j1.x的jar

  下面详细介绍下log4j2基本使用,一般要在类路径下配置一个xml文件做为log4j2的配置文件,文件按照约定最好命名为log4j2.xml。log4j2默认会在classpath目录下寻找log4j.json、log4j.jsn、log4j2.xml等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台。看一个最简单的配置文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="5"> <!-- status属性是用来指定log4j2自身的日志输出级别,monitorInterval属性值如果是非零值则会间隔这个值的秒数,去查看配置文件是否发生变化,如果变化则会动态加载新的配置 -->
<appenders>              <!-- appender是用来指定日志的输出地,我们用到的常用appender是两个,控制台和文件,分别配置如下 -->                  
<Console name="StandOut" target="SYSTEM_OUT"> <!-- SYSTME_OUT是log4j2里面定义的一个常量值,表示标准输出 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> <!--指定了日志的布局输出格式,详细占位符的意义见下文 -->
</Console>
<Console name="StandError" target="SYSTEM_ERR"> <!-- SYSTME_ERR是log4j2里面定义的一个常量值,表示标准错误输出 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="f:/logs/info.log">
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers> <!--日志器的定义-->
  <root level="TRACE">
    <appender-ref ref="Console"/>
  </root>
<logger name="org.huxin.study.demo.log4j2.App" level="INFO" additivity="false"> <!--它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。 -->
    <appender-ref ref="StandError"/>
  </logger>
</loggers>
</configuration>

控制日志输出格式的常用占位符含义如下:

%d{HH:mm:ss.SSS} 表示输出到毫秒的时间

%t 输出当前线程名称

%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

%logger 输出logger名称,因为Root Logger没有名称,所以没有输出

%msg 日志文本

%n 换行

log4j定义的日志级别有:日志级别从低到高分为 ALL TRACE DEBUG INFO WARN ERROR FATAL OFF  ,某个日志器配置为某个级别,则低于这个级别的日志不会输出

日志器Logger:在使用log4j2时,我们一般都会通过代码先在类中获取一个Logger,然后调用其方法进行日志的打印,这个Logger就称为日志器。获取日志器的方法如下:

        Logger x = LogManager.getLogger("wombat");    //实际在使用时,一般通过类名去获取日志器

        日志器是有父子级别的概念的,log4j2默认提供了一个root的日志器做为所有日志器的父日志器。每个日志器会对应一个具体的LoggerConfig,如果某个日志器没有相应的LoggerConfig,则会继承其父日志的LoggerConfig ,

log4j2使用入门(一)的更多相关文章

  1. ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

    前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...

  2. log4j2使用入门(二)——与不同日志框架的适配

    在之前博客中已经指出log4j2可以与不同的日志框架进行适配,这里举一些实际应用进行说明: 1.比如我们在项目中使用了log4j2作为日志器,使用了log4j-api2.6.2.jar和log4j-c ...

  3. Log4j2基本使用入门

    1.Log4j2简介 Apache Log4j 2是日志框架Log4j的升级, 它比其前身Log4j 1.x提供了重要的改进, 并且参考了Logback中许多有用的改进, 同时修复了Logback的一 ...

  4. SpringBoot系列一(入门,ORM,Transaction,log4j2等)

    今天写篇springboot的博客,主要介绍一下springboot搭建以及一些整合. 首先介绍springboot搭建,我今天选择Maven,想用Gradle搭建的就自己百度一下吧,访问" ...

  5. Log4j2入门

    转载自:http://www.cnblogs.com/hzhuxin/p/6406272.html Log4j2 是 Log4j的升级版本,对其进行解压,可以看到以下几个jar包. log4j-1.2 ...

  6. 【log4j2】log4j的升级版log4j2的简单入门使用

    1.jar包 log4j-api.jar    +    log4j-core.jar maven仓库配置: <dependency> <groupId>org.apache. ...

  7. SpringBoot—整合log4j2入门和log4j2.xml配置详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...

  8. Log4J2基本配置

    [1]. Log4J2入门: <1>. 导入Jar包: log4j-api-2.0-beta9.jar log4j-core-2.0-beta9.jar <2>. 编写代码: ...

  9. log4j2 项目日志组件

    在项目运行过程中,常常需要进行功能调试以及用户行为的跟踪和记录,部分人习惯使用System.out,但这并不建议,它仅仅是使用方便但不便于维护也无扩展性.相比log4j的话,log4j可以控制日志信息 ...

随机推荐

  1. Lodop条形码竖条和值右端不对齐的解决方法

    当Lodop条形码设置的宽度比较短,数值比较多的时候,会出现条码的竖条和右端不对齐.个人测试了一下,发现解决办法有三种:1.增加条形码的宽度.2.隐藏条码本身的值,用text文本代替.3.修改条形码下 ...

  2. Elastic Search 语法总结

    1. 插入 PUT /megacorp/employee/1 { "first_name" : "John", "last_name" : ...

  3. json内存级非关系数据库

    介绍 `jsonDB2`是一个基于内存的键值对数据库(非关系型数据库) 开发初衷:实现个人tornado项目中内存session存储功能(不想引入redis等非关系型数据库) 项目地址: https: ...

  4. 打开mac上面的apache 服务器

    1. apache 服务器在系统安装的时候就默认安装了 config 文件未知:  /etc/apache2/httpd.conf 2. 编辑配置文件 httpd.conf 2.1 查找  Docum ...

  5. 【BZOJ5491】[HNOI2019]多边形(模拟,组合计数)

    [HNOI2019]多边形(模拟,组合计数) 题面 洛谷 题解 突然特别想骂人,本来我考场现切了的,结果WA了几个点,刚刚拿代码一看有个地方忘记取模了. 首先发现终止态一定是所有点都向\(n\)连边( ...

  6. Java转换流、缓冲流、流操作规律整理

    转换流 1.1                OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字 ...

  7. 队列优化的dijkstra

    #include<iostream> #include<queue> #include<cstdio> #include<cstring> #inclu ...

  8. [物理学与PDEs]第2章习题9 粘性流体动能的衰减

    设 $\Omega\subset {\bf R}^3$ 为有界域, ${\bf u}$ 为 Navier-Stokes 方程组 (3. 4)-(3. 5) 满足边界条件 (3. 7) 的解, 其中体积 ...

  9. 关于JS中的常用表单验证+正则表达式

    一.非空验证 trim:去空格(去掉前后的空格),任何字符串都可以用这个方法.写法为:if(v.trim().length==0),表示如果去掉空格后的字符串的长度为0. <body> & ...

  10. CSRF篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题

    0x01 Brief Description csrf 跨站伪造请求,请求伪造的一种,是由客户端即用户浏览器发起的一种伪造攻击.攻击的本质是请求可以被预测的到. 在了解csrf攻击之前,需要了解浏览器 ...