Hibernate初学者---关于log4j 的知识

来源:互联网 发布:淘宝客不计入销量了吗 编辑:程序博客网 时间:2024/05/19 02:41

log4j2的结构


它由Configuration>Appenders>Loggers> 三层标签组成。

  • Configuration 也可以有自己的属性,[name],[package],[status][scan],[scanPeriod]. 其中,[status]可以设置八种状态,它们分别是:TRACE,DEBUG,INFO,WARN,ERROR,FATAL, ALL和OFF。[status]显示的是log4j2本身内部加载运行软件时的环境,而其它标签中的[level]标签是显示application运行环境下的信息.[scan]标签默认为true,表示配置文件改变时自动重新加载。[scanPeriod]依赖于[scan]标签,设置多久刷新一次,单位毫秒。
  • Loggers 集群标签内可以设置多个 logger 分标签.每个logger就像是一个路标一样,设好过滤条件后, 分别指向各种Appenders。唯一需要提醒的是,Loggers集群标签里面,必须有一个root标签,它是第一层过滤的基础,root的level状态等级越高,其它Logger可过滤的细节就越少! 一般都设成”TRACE”。
  • Appenders 集群标签内也可以设置多个appender分标签,Appender主要负责描述日志的位置/格式/参数信息。所以它分好多种,常见的有ConsoleAppender ; RollingFileAppender ;HttpAppender;FileAppender;FailoverAppender 等等
  • 所以我们只需要记住一点!所有<AppenderRef>中定义的值 ,都可以在<Appenders>标签中找到相应参数配置。

log4j2的环境配置


下载SOURCE只是为了方便查看源码
这里写图片描述

解压后,只需要这两个包
这里写图片描述


自定义自己需要的JAR包
项目右键>properties>JavaBuildPath>Libraies

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
mysql-connector-java-5.1.44-bin.jar MYSQL驱动包也是必需的。
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述


在项目中引入上图中自定义的JAR包。
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述


添加完成后的画面

这里写图片描述


log4j2 基础实例

1,在两个包中分别新建测试类Class_A 和 Class_B,以及他们的测试类
这里写图片描述
2,在src目录下建立log4j2.xml,
这里写图片描述
我们先不管它里面的文件内容是什么意思,先照本宣科,我会一步一步慢慢讲解。

<?xml version="1.0" encoding="UTF-8"?><Configuration status="OFF">    <Appenders>        <Console name="Console" target="SYSTEM_OUT">            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />        </Console>    </Appenders>    <Loggers>        <Root level="trace">            <AppenderRef ref="Console" />        </Root>    </Loggers></Configuration>

3,我们在Test_Class_A中,写一个Main方法先简单验证一下log4j2 是否正常工作。

package com.bai.fan;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import com.bak.bum.Class_B;public class Test_Class_A {public static void main(String[] args) {    Logger logger1 =LogManager.getLogger();    logger1.trace("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的   TRACE级别");    logger1.debug("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的   DEBUG级别");    logger1.info("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的     INFO级别");    logger1.warn("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的      WARN级别");    logger1.error("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的    ERROR级别");    logger1.fatal("我是logger1, 因为我没有指定类名,所以我是当前Main方法体的    FATAL级别");    Logger logger2 = LogManager.getLogger(Class_B.class.getName());    logger2.trace("我是logger2,因为我指定了类名,所以我是   Class_B的  TRACE级别");    logger2.debug("我是logger2,因为我指定了类名,所以我是   Class_B的   DEBUG级别");    logger2.info("我是logger2,因为我指定了类名,所以我是   Class_B的     INFO级别");    logger2.warn("我是logger2,因为我指定了类名,所以我是   Class_B的      WARN级别");    logger2.error("我是logger2,因为我指定了类名,所以我是   Class_B的   ERROR级别");    logger2.fatal("我是logger2,因为我指定了类名,所以我是   Class_B的    FATAL级别");}}

项目右键 >RunAs >JAVA application
这里写图片描述

运行结果

这里写图片描述

这里要注意的是:

  • 为了实验效果,我才把这两个Logger打印在 同一个地方(Console控制台),正常情况下,它是可以在log4j2.xml中指定输出位置的,或许这就是所谓的异步日志的雏形吧

过滤控制

  • 一个完整的日志信息,由application本身的运行信息也就是【main】方法执行信息和log4j2系统执行信息两部分组成。
  • 上图例子中,没有log4j2系统执行信息。因为在配置文件里面它是“OFF”状态。
    这里写图片描述

  • 现在我们把它设为“DEBUG”
    这里写图片描述

  • 运行结果
    这里写图片描述
    • 从运行结果中我们可以看到,它输出了 log4j2 从配置文件的匹配到Logger session结束的整个过程。
    • 这里可以设置七个级别,它们分别是ALL/OFF TRACE,DEBUG,INFO,WARN,ERROR, 默认为WARN.
    • 除此之外,我们还可以对程序执行过程中产生的日志进行过滤,所谓的过滤仅局限于六个信息级别

程序运行日志的过滤

  • 程序日志的过滤,可以在多个位置,多个标签内同时进行多重过滤。
  • 先来一个最简单的控制台过滤,此处为第一层过滤!
    • 原来的配置文件中,Root level 为 “trace” ,
    • 这里写图片描述
    • 现在我们把它改成”DEBUG”
    • 这里写图片描述
    • 运行结果
    • 这里写图片描述
    • 可以看到,INFO以下级别的信息将被过滤。

  • 再来看看第二层过滤。
    • 需要补充一点标签知识。<AppenderRef ref ="Cansole"> 表明输出目的地为 “控制台” Cansole
    • 这里写图片描述
    • 既然指向了控制台,那一定在<Appenders>标签里面有相关的参数配置信息。*
    • 这里写图片描述
    • 我们添加这样一段代码<ThresholdFilter level="error" onMatch="ACCEPT"onMismatch="DENY"/>
    • 这里写图片描述
    • ThresholdFilte表明它是一个基础过滤器,它在第一层过滤的基础上,又设置了“error级别以上”的过滤条件,符合ERROR级别以上时,接受,不符合的全部屏蔽掉,请注意!这里的屏蔽不是不让它显示了,而是不再被其它过滤器搜索到了!我们设置的二级过滤级别,本身就有“不显示比我级别低的等级”的功能。不再被其它过滤器搜索到,意味着其它过滤器失去效用。这时第三个属性,NEUTRAL中立,就派上用场了,不符合我的条件就中立,不影响其它过滤器正常工作。
    • 或许看看这张图就很容易理解ThresholdFilte过滤器的原理了。
    • 这里写图片描述
    • 一级过滤等级和二级过滤等级,可以根据需要灵活配置。
    • 这里写图片描述

将日志保存到文件

  • 上个例子当中,我们把内容输出到控制台,当然我们还可以把它输出到特定的文件里。

- 这里写图片描述

  • 新建一个<AppenderRef>路标 ref值 指向<File> name “testFile”
  • 同时在C:\mys下新建testFile.log文件。
  • 运行结果如下
  • 这里写图片描述

<?xml version="1.0" encoding="UTF-8"?><Configuration status="off">    <Appenders>        <File name="testFile" fileName="c:\mys\TestFile.log"            append="true" bufferedIO="false" advertise="true">            <PatternLayout pattern="%d %p %C{1.} [%t] %m%n" />        </File>        <Console name="Console" target="SYSTEM_OUT">            <ThresholdFilter level="fatal" onMatch="DENY"                onMismatch="ACCEPT" />            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />        </Console>    </Appenders>    <Loggers>        <Root level="error">            <AppenderRef ref="Console" />            <AppenderRef ref="testFile"/>        </Root>    </Loggers></Configuration>

文件写满自动创建新文件

《近期更新》

原创粉丝点击