Log4j2入门(1)-控制台日志输出
来源:互联网 发布:淘宝售假次数如何计算 编辑:程序博客网 时间:2024/05/22 06:27
Log4j2入门(1)-控制台日志输出
- Log4j2入门1-控制台日志输出
- 1引入依赖
- 2构思需求
- 3Log4j简单的配置文件
- 4编写demo
刚学习log4j2日志,对于里面的root和logger的继承关系比较迷惑,遂有此文
使用控制台输出不同级别的日志,并定义日志的继承关系测试
附上demo地址
示例项目使用maven作依赖管理
github源码地址:https://github.com/fizzme/log4j2-start1
(1)引入依赖
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency></dependencies>
(2)构思需求
定义Logger配置的继承
定义要输出到控制台指定的日志级别为trace
那么trace及其以上级别的日志将输出到控制台
需要做的实际上就是,将root级别的日志设置的高一些,
未在配置文件中明确设置的Logge,将会继承root Logger,日志打印按照root的appender进行
(3)Log4j简单的配置文件
说明:
来看我们添加的配置文件log4j2.xml,以Configuration为根节点,有一个status属性(关闭自身日志输出 status=”OFF”>),这个属性表示log4j2本身的日志信息打印级别。如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。
1.2 、日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适用。
1.3、Appender可以理解为日志的输出目的地,这里配置了一个类型为Console的Appender,也就是输出到控制台。Console节点中的PatternLayout定义了输出日志时的格式
(4)配置说明:
这里配置了两个logger,一个是com.fizzbook.log4j2
,一个是root的Logger
根据log4j的日志继承关系,com.fizzbook.log4j2.xxx.xx
表示是logger:com.fizzbook.log4j2
的子孙节点
如果不指定日志相关的日志配置LoggerConfig,就会使用父logger的
我们在getLogger以如下方式获取的LogManager.getLogger(Name);
name如果是配置中的logger的子节点,将使用父logger的appender和日志级别配置
static Logger logger = LogManager.getLogger(App.class.getName());
配置Appender
log4j的additivity属性:
它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。
(4)编写demo
在com.fizzbook.log4j2包里面创建Hello.java来测试日志
public class Hello { static Logger logger = LogManager.getLogger(Hello.class.getName()); public boolean hello() { logger.entry(); //trace级别的信息,单独列出来是希望你在某个方法或者程序逻辑开始的时候调用,和logger.trace("entry")基本一个意思 logger.error("Did it again!"); //error级别的信息,参数就是你输出的信息 logger.info("我是info信息"); //info级别的信息 logger.debug("我是debug信息"); logger.warn("我是warn信息"); logger.fatal("我是fatal信息"); logger.log(Level.DEBUG, "我是debug信息"); //这个就是制定Level类型的调用:谁闲着没事调用这个,也不一定哦! logger.exit(); //和entry()对应的结束方法,和logger.trace("exit");一个意思 return false; } public static void main(String[] args) { Hello hello = new Hello(); logger.info( "Hello.class.getName():"+ Hello.class.getName()); hello.hello(); }}
日志输出结果:
2017-11-21 16:54:48.153 [main] INFO com.fizzbook.log4j2.Hello - Hello.class.getName():com.fizzbook.log4j2.Hello2017-11-21 16:54:48.157 [main] TRACE com.fizzbook.log4j2.Hello - Enter2017-11-21 16:54:48.157 [main] ERROR com.fizzbook.log4j2.Hello - Did it again!2017-11-21 16:54:48.157 [main] INFO com.fizzbook.log4j2.Hello - 我是info信息2017-11-21 16:54:48.157 [main] DEBUG com.fizzbook.log4j2.Hello - 我是debug信息2017-11-21 16:54:48.157 [main] WARN com.fizzbook.log4j2.Hello - 我是warn信息2017-11-21 16:54:48.157 [main] FATAL com.fizzbook.log4j2.Hello - 我是fatal信息2017-11-21 16:54:48.158 [main] DEBUG com.fizzbook.log4j2.Hello - 我是debug信息2017-11-21 16:54:48.158 [main] TRACE com.fizzbook.log4j2.Hello - Exit
该类的全限定名是com.fizzbook.log4j2.Hello,那么获取的Logger就是com.fizzbook.log4j2.Hello将继承Logger,输出trace级别及以上的日志,也就是将各级别的日志结果全部输出
我新创建一个包并重命名进行测试
此时将不是继承com.fizzbook.log4j2,因为使用getClass.getName获取的Logger名称跟包名相关,并没有与之相关的父节点,所以默认继承root Logger,root Logger级别比较高,只会输出error级别及以上的日志
复制一份Hello.java代码放入新建的包中:
结果如下:
2017-11-21 17:01:20.620 [main] ERROR com.fizzbook.log4j2_02.Hello - 当前logger的名称 :com.fizzbook.log4j2_02.Hello2017-11-21 17:01:20.623 [main] ERROR com.fizzbook.log4j2_02.Hello - Did it again!2017-11-21 17:01:20.623 [main] FATAL com.fizzbook.log4j2_02.Hello - 我是fatal信息
只输出了error和fatal级别的,跟我们定义的root Logger的日志级别一样。证明了推论
- Log4j2入门(1)-控制台日志输出
- log4j2入门(2)-日志多appender输出
- iBatis使用log4j2输出日志
- SpringBoot 配置log4j2日志输出
- SpringBoot Log4j2日志分级输出
- 005 使用log4j2输出日志(重构)
- log4j2入门(三) PatternLayout输出格式详解
- 【Android 开发入门】android studio 控制台打印输出日志
- 【Android 开发入门】android studio 控制台打印输出日志
- OpenFire控制台输出日志
- log4j2配置输出日志到Kafka
- mybatis 3.2.8 + log4j2.0.2 控制台输出sql语句
- mybatis 3.2.8 + log4j2.0.2 控制台输出sql语句
- log4j2日志管理xml配置方式实现日志分类输出
- RAILS输出日志到控制台
- cocos2d-x 控制台输出日志
- cocos2d-x 控制台输出日志
- log4j日志输出到控制台
- 自定义类型(结构体、位段、枚举和联合)
- Statement、 PreparedStatement 、CallableStatement 区别和联系
- 在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記
- jQuery
- 【hdu 4970】 Killing Monsters 【2014 Multi-University Training Contest 9 】
- Log4j2入门(1)-控制台日志输出
- SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
- 渣渣的TensorFlow学习笔记之strides和kernel影响尺寸变化
- java 排序算法总结
- 50道hdu基础搜索总结
- CSS3 animation(动画) 属性
- [一点笔记]主键与外键-MySQL中的表连接
- 程序员常用网站
- Linux下的tar压缩解压缩命令详解