五分钟秒懂Java日志组件
Java中有许多种日志记录方式,有些API有占位符,有些API没占位符,初学的人可能会搞不清楚这些日志组件的由来。我一开始的时候也是很懵逼的,后来一点点弄懂了于是就又了这篇文章。
在Java中进行日志记录常见有三种方式,分别是JDKLog、Log4J、LogBack。
一、JDKLog
JDKLog记录方式是JDK官方提供的一个记录日志的方式,直接在JDK中就可以使用。但JDKLog其功能比较简单,现在用的人也很少。
import java.util.logging.Logger; /** * JDKLog Demo */ public class JDKLog { public static void main( String[] args ) { Logger logger = Logger.getLogger("JDKLog"); logger.info("Hello World."); } }
二、LOG4J
LOG4J 是 Apache 的一个日志开源框架,使用的人数也不少,有多个分级(DEBUG/INFO/WARN/ERROR)记录,但LOG4J本身不支持使用占位符,这给日志记录带来了极大的不便。虽然LOG4J确实有一些不便之处,但是LOG4J已经能够满足很多项目的需求,如果把JDKLog比喻成一把小刀的话,那么LOG4J就是一把手枪了。
LOG4J 有 1.X 版本和 2.X 版本,现在官方推荐使用 2.X 版本,2.X 版本在架构上进行了一些升级,配置文件也发生了一些变化,但好在官方的配置说明文档非常清楚。下面我们就以 LOG4J 2.6.2 为例来介绍如何使用 LOG4J。
使用 LOG4J 2.6.2 首先需要导入所依赖的两个 Jar 包:
<!-- Log4J --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.2</version> </dependency>
增加配置文件 log4j2.xml 放在 resource 目录下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <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="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
<Root>节点的 level 属性表示输出的最低级别。
编写测试类:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * Log4J Demo */ public class Log4jLog { public static void main(String args[]) { Logger logger = LogManager.getLogger(Log4jLog.class); logger.debug("Debug Level"); logger.info("Info Level"); logger.warn("Warn Level"); logger.error("Error Level"); } }
运行测试类输出结果:
10:16:08.279 [main] INFO com.chanshuyi.Log4jLog - Info Level 10:16:08.280 [main] WARN com.chanshuyi.Log4jLog - Warn Level 10:16:08.280 [main] ERROR com.chanshuyi.Log4jLog - Error Level
如果没有配置 log4j2.xml 配置文件,那么LOG4J讲自动启用类似于下面的的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <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="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
输出结果:
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 11:40:07.377 [main] ERROR com.chanshuyi.Log4jLog - Error Level
如果你没有配置文件,那么控制台会输出提示你没有编写配置文件。
三、LogBack
LogBack 可以对比起 Log4J 有更快的运行速度,更好的内部实现,并且 LogBack 内部集成了 SLF4J 可以更原生地实现一些日志记录的实现。如果说 Log4J 是手枪的话,那么 LogBack 就是步枪,大大提高了日志记录的效率。
使用 LogBack 需要首先引入依赖:
<!-- LogBack --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency>
配置 logback.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern> </layout> </appender> <logger name="com.chanshuyi" level="TRACE"/> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
LogBack 的日志级别区分可以细分到类或者包,这样就可以使日志记录变得更加灵活。之后在类文件中引入Logger类,并进行日志记录:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * LogBack Demo */ public class LogBack { static final Logger logger = LoggerFactory.getLogger(LogBack.class); public static void main(String[] args) { logger.trace("Trace Level."); logger.debug("Debug Level."); logger.info("Info Level."); logger.warn("Warn Level."); logger.error("Error Level."); } }
输出结果:
14:34:45.747 [main] TRACE com.chanshuyi.LogBack - Trace Level. 14:34:45.749 [main] DEBUG com.chanshuyi.LogBack - Debug Level. 14:34:45.749 [main] INFO com.chanshuyi.LogBack - Info Level. 14:34:45.749 [main] WARN com.chanshuyi.LogBack - Warn Level. 14:34:45.749 [main] ERROR com.chanshuyi.LogBack - Error Level.
但掌握了上面几种日志记录组件还不够,有时候一些项目因为各种原因使用的是LOG4J记录组件,代码中写了许多LOG4J方式的代码。此时如果要转到LogBack日志组件方式就会很痛苦,我们总不能把之前所有的日志代码方法都改一下吧。这时候就可以用各种日志转接包,将JDKLog、LOG4J统一使用LogBack 输出。这就是下一篇要说的:2.日志组件的统一门面
参考资料:
五分钟秒懂Java日志组件的更多相关文章
- 五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
- Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新
Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...
- java日志组件介绍(common-logging,log4j,slf4j,logback )
转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...
- 转:java日志组件介绍(common-logging,log4j,slf4j,logback )
原网址:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging common-logging是 ...
- 【转】java日志组件介绍(common-logging,log4j,slf4j,logback )
common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, comm ...
- 算法笔记_105:蓝桥杯练习 算法提高 上帝造题五分钟(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 第三分钟,YUHC ...
- Java日志组件2---Log4j(org.apache.log4j.Logger)
如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用jdk的自带Log完全可以解决问题.但是,在开发的过程中,大多数项目都比较大,为方便找到程序的bug,都是需要系统的记录日志的.这里 ...
- 2015第30周四Java日志组件
Java 日志 API 从功能上来说,日志 API 本身所需求的功能非常简单,只需要能够记录一段文本即可.API 的使用者在需要进行记录时,根据当前的上下文信息构造出相应的文本信息,调用 API 完成 ...
- Java面向对象笔记(五分钟秒懂)
面向对象概念 面向对象三大特征:封装,继承,多态 面向对象编程(OOP,Object Oriented Programing)是相对于面向过程编程说的,之前写的代码基本都是纯的面向过程编程的,当项目复 ...
随机推荐
- 构建Docker平台【第二篇】安装 Docker
第一步:上传安装包和 docker 镜像 1.安装包: docker-engine-1.12.1-1.el7.centos.x86_64.rpm docker-engine-selinux-1.12. ...
- BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
CLJ就是喜欢出ctsc上讲的东西,看来还是得找时间把他的那几道题做下 首先记f(x)为答案>x的概率,那么把这个东西从0到1积分就是答案了 f(x)<=>边小于x不能使图联通的概率 ...
- WC2015 k小割(k短路+暴力+搜索)
首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面 ...
- Qt中纯C++项目发布为dll的方法(超详细步骤)
众所周知,我们可以将C++项目中的类以及某些方法导出,形成 .dll 文件,以供其他程序使用,下面将说明Qt环境下的使用方法. 首先创建共享库,步骤如下: 下一步会出现类对话框等等,不用管它,直接点击 ...
- [编织消息框架][设计协议]bit基础
理论部分 1字节等于8比特,也就是8个二进数,如下面公式 1Byte = 8bits = 0111 1111 1Short = 2Btye 1Int = 4Byte 那学这些有什么用呢? 可以用来做数 ...
- 用友财务软件U8V10.1虚拟机 及培训视频
需要学习用友财务软件U8V10.1虚拟机 及培训视频 ,请联系QQ:858-048-581 虚拟机系统为WIN2003+SQLSERVER2008+U8V10.1,虚拟机内存最少需要2G
- HTML,login文本框·
列子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 关于Edittext默认弹出软键盘为数字键
如果说我们只是输入数字的话,我们可以直接在xml文件中: android:inputType="number" 如果是身份证类型的话,我们可以这样: android:inputTy ...
- macOS apache配置及开启虚拟服务器的开启,apache开启重写模式
今天把自己的mac系统升到最新版,但是,apache却不能用了,因为mac上的apache是系统自带的,因为是mac目前的最新系统,所以出现了好多问题,整理了一下午也没有啥进展,最后还是把原来的在云盘 ...
- enum类型的本质(转)
原地址:http://www.cppblog.com/chemz/archive/2007/06/05/25578.html 至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到 ...