Java 标准日志工具 Log4j 的使用(附源代码)
Log4j 是事实上的 Java 标准日志工具。会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准。如果你是一名 Java 程序员,如果你还不会用 Log4j,那你真的很有必要读一下这篇文章了。很多朋友反映想写程序日志,但是却不知道怎么把日志写到日志文件里,而且 Java 这方面的资料似乎不多。如《如何写log4j.xml日志配置文件》 所述。本文详细介绍了如何在项目中使用 Log4j 的步骤,并附加了一个例子性质的代码。
Why Log4j?
有的朋友喜欢用 System.out.println(String msg); 语句来调试代码。这个确实是一个很好的调试工具。但是随着项目的结束,或者问题的解决,这些语句需要我们一个个地揪出来手工删除?《如何一次性删除所有的system.out.println语句 》,这个帖子里的这位网友就遇到了这样一个问题。
全部都删除干净,问题又来了:如果以后又出现问题了该怎么办呢?难道再次添加,问题解决后再次查找到删除?
使用 Log4j 就可以很好地解决上面的问题和矛盾。Log4j 有一个日志级别,用来控制是否进行日志记录。其由低到高的级别如下:
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
将日志进行分级的目的就是在于可以灵活配置。比如说如果日志级别限定于 DEBUG,那么包括 DEBUG 在内的,INFO、WARN、ERROR、FATAL、OFF 都会进行日志记录;而如果级别定义为 INFO,那么 INFO 以下的级别,像 DEBUG 的日志就不会记录。比如如下代码:
- Logger log = LogManager.getLogger(HelloWorld.class);
- log.info("info通过 class 对象来获取 logger 对象");
- log.debug("debug通过 class 对象来获取 logger 对象");
- log.warn("warn通过 class 对象来获取 logger 对象");
如果你的 Log4j 定义为输出到控制台,日志级别定义为 INFO,那么执行到上面语句块,控制台会输出以下日志信息:
18:07:37,237 INFOHelloWorld:32 - info通过 class 对象来获取 logger 对象
18:07:37,245 WARNHelloWorld:34 - warn通过 class 对象来获取 logger 对象
具体范例作者已经上传至附件,有兴趣的朋友可以去下载下来看看。限于时间,例子里仅仅演示了如何将日志信息输出到控制台上。当然,日志也可以输出到文件、数据库中。作者认为,如果弄清楚了示例代码,对于其他实现聪明的读者完全可以参考 Log4j 的 API 自己搞定。
How to Log4j?
第一步:下载 Log4j 工具包 。
官方网站地址:http://logging.apache.org/log4j/1.2/index.html。进入后左侧菜单栏里 Documentation 下的 JavaDoc 就是 Log4j 的在线 API 文档。我们点击 Get log4j 1.2 下 的 Download 进入下载页面,最新版本是 1.2.15,点击 apache-log4j-1.2.15.zip 进行下载该文件,解压缩后得到 Log4j 的源代码、示例代码、安装说明和 Log4j 的 jar 包(log4j-1.2.15.jar)。
第二步:项目中导入 log4j 的 jar 包 。
作者开发 IDE 是 eclipse,右击项目名 -> Build Path -> Configure Build Path -> Add External JARS -> 找到你解压缩得到的 log4j-1.2.15.jar 并选中。确定。
第三步:编辑 log4j.properties 文件,配置你的 Log4j 。
在项目的 src 目录下,新建 log4j.properties 文件。通过这个接口对 Log4j 进行配置。
示例代码中作者的 log4j.properties 配置如下:
- ### logger 的配置 ###
- #配置根 logger
- log4j.rootLogger=INFO,stdout
- ### direct log messages to stdout ###(标准的终端输出)
- #控制台输出
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- #自定义输出布局
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- #输出的格式
- log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L - %m%n
说明:
“log4j.rootLogger=INFO,stdout”句:定义根 logger 配置项。其语法为:级别,输入终端1,输出终端2,……。stdout 代表日志输出到控制台。
“log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L - %m%n”语句定义打印格式。打印参数如下:
%m:输出代码中指定的消息。
%p:输出优先级。
%r:输入自应用启动到输出该log信息耗费的毫秒数。
%c:输出所属的类目,通常就是所在类的全名。
%t:输出产生该日志线程的线程名。
%n:输出一个回车换行符。Windows平台为“/r/n”,UNIX为“/n”。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,推荐使用“%d{ABSOLUTE}”,这个输出格式形如:“2007-05-07 18:23:23,500”,符合中国人习惯。
%l:输出日志事件发生的位置,包括类名、线程名,以及所在代码的行数。
第四步:代码中需要日志记录的地方进行日志代码 。
通过 Logger log = LogManager.getLogger(你要进行日志的代码所在的类.class);获取 logger 对象,然后调用其 info、debug 等方法进行日志输出。示例代码如下:
- /**
- * 文件名:HelloWorld.java
- *
- * 版本信息:
- * 日期:2010-1-18
- * Copyright XXX Corporation 2010
- * 版权所有
- *
- */
- package com.defonds.log4j;
- import org.apache.log4j.LogManager;
- import org.apache.log4j.Logger;
- /**
- *
- * 项目名称:TestLog4j
- * 类名称:HelloWorld
- * 类描述:Log4j 测试类
- * 创建人:Defonds
- * 创建时间:2010-1-18 下午02:58:18
- * 修改人:Defonds
- * 修改时间:2010-1-18 下午02:58:18
- * 修改备注:
- * @version
- *
- */
- public class HelloWorld {
- public static void main(String[] args) {
- Logger log = LogManager.getLogger(HelloWorld.class);
- log.info("info通过 class 对象来获取 logger 对象");
- log.debug("debug通过 class 对象来获取 logger 对象");
- log.warn("warn通过 class 对象来获取 logger 对象");
- }
- }
再次说明:本示例只是让没有用过 Log4j 的朋友进行入门级的认识,Log4j 强大的日志记录功能不仅与此。更多 Log4j 的日志功能,还需要读者在项目中自己去切身体会认识。
Java 标准日志工具 Log4j 的使用(附源代码)的更多相关文章
- 细说Java主流日志工具库
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...
- Java设计模式-代理模式之动态代理(附源代码分析)
Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...
- Java主流日志工具库
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...
- 日志工具——log4j
资料参考自:http://www.codeceo.com/article/log4j-usage.html 关于日志的基本概念以及从入门到实战,请参见:http://www.cnblogs.com/L ...
- Android开发之SDCardUtils工具类。java工具详细代码,附源代码。判断SD卡是否挂载等功能
package com.xiaobing.zhbj.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputSt ...
- Java日志工具之Log4J
Log4J与java.util.logging.Logger的使用方式出奇的相似,因此如果先看这篇文章<Java日志工具之java.util.logging.Logger>在来用Log4J ...
- Java中的日志——Java.util.logging、log4j、commons-logging
Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-loggin ...
- 日志工具全面理解及配置应用---以Log4j例子
一.日志系统基本常识 1.日志系统作用:将日志信息输出到控制台和文本文件,以追踪代码运行信息. 2.日志系统操作的是什么?日志系统打印信息,也是调用日志系统的log.Info(),log.Warn() ...
- Apache通用日志工具commons-logging和Log4j使用总结
转自:https://blog.csdn.net/lzl13391522110/article/details/53758536 Apache通用日志工具commons-logging和Log4j使用 ...
随机推荐
- Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)
OGG 12c中,并行交付有2种模式:集成交付.协同交付.不过集成交付只能针对目标端是oracle数据库(有版本要求)使用,而协同交付则可以在非oracle数据库上使用. 先来看2个问题, l 为什么 ...
- python文件打包格式,pip包管理
1..whl是python文件的一种打包格式, 在有些情况下,可以将文件的后缀名改为.zip并解压 2.cmd中,提示pip版本太低,先升级pip pip install --upgrade pi ...
- linux下文件系统的介绍
一.linux文件系统的目录结构 目录 描述 / 根目录 /bin 做为基础系统所需要的最基础的命令就是放在这里.比如 ls.cp.mkdir等命令:功能和/usr/bin类似,这个目录中的文件都是可 ...
- 《Java7中 下划线的新特性》
//Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...
- SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23 ...
- iOS- 利用AFNetworking(AFN) - 实现图片上传
官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseURL 2> 请求 3> 操作队列 NSOperationQueue 2. 由AFHTT ...
- 使用busybox构建根文件系统
当我们在Qemu上运行起来自己编译的内核之后,需要使用busybox构建一个文件系统,将此文件系统挂载上去就可以使用busybox提供的各种命令了. 1.编译安装busybox 源码下载地址:http ...
- 计算几何----判断空间点是否在一个四面体(tetrahedron)内部
DESCRIPTION: 判断空间点 P(x, y, z)是否在一个四面体的内部? Let the tetrahedron have vertices V1 = (x1, y1, z1) V2 = ( ...
- CPP,MATLAB实现牛顿插值
牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...
- SQUID之cache_peer
一共关系到cache_peer/always_direct/never_direct/hierarchy_stoplist/prefer_direct等配置项. squid的使用指南上,关于alway ...