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>
文件写满自动创建新文件
《近期更新》
阅读全文
0 0
- Hibernate初学者---关于log4j 的知识
- Hibernate初学者---关于annotation注解的相关知识
- 关于hibernate使用log4j
- 关于Android初学者的学习线路的相关知识
- Hibernate初学者---关于Session和它的三种状态
- log4j的一些知识
- hibernate初学者的第一步
- 关于Hibernate slf4j与log4j 日志不起作用的解决办法
- 初学者应该了解的知识
- Shell初学者的入门知识
- 初学者的java小知识
- 关于初学者的问题
- 关于JSP的一些小的知识适于初学者,高手勿看·
- 初学者对Hibernate的学习方法
- 关于log4j的应用
- 关于log4j的使用
- 关于log4j的问题
- 关于log4j的配置
- 登录到远程Linux
- python爬去知乎和简书内容
- HDU6210 transaction transaction transaction
- 2017.9.10 连续攻击游戏 思考记录
- pin_ptr (C++/CLI)
- Hibernate初学者---关于log4j 的知识
- 请算法简单点(1)
- 打印下列华氏温度与摄氏温度对照表。
- Android UDP协议通信简单尝试
- Add Two Numbers算法
- BZOJ 4010 菜肴制作(拓扑排序)
- mysql表损坏及修复
- MATLAB元胞数组写入Access数据库
- 在 centos7 版本中的 各项服务启动命令