如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用jdk的自带Log完全可以解决问题。但是,在开发的过程中,大多数项目都比较大,为方便找到程序的bug,都是需要系统的记录日志的。这里边出现了Log4j(Log for Java),Apache Log4j下载地址:log4j官方下载

apache的log4j是一个开源项目,作为一个强大的日志组件,它提供的功能远比jdk系统再带的log要多,可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。

下面是本人测试log4j的过程

1、新建java项目:Logger

2、添加log4j-1.2.17.jar包

3、添加log4j.properties配置文件,这里在写的过程中发现,在写入properties文件的时候,会将中文字符转化为unicode码,所以我将log4j.properties更改为log4j.txt文件,然后在代码中手动加载log4j.txt文件(文件位置config/log4j.txt)

config/log4j.txt:

  1. ### 设置logger级别 ###
  2. log4j.rootLogger = debug,stdout,D,E
  3.  
  4. ### 输出格式解释:
  5. ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
  6.  
  7. ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
  8. ### %c: 全类名
  9. ### %M: 调用的方法名称
  10. ### %F:%L 类名:行号(在控制台可以追踪代码)
  11. ### %n: 换行
  12. ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
  13. ### %m: 日志信息
  14.  
  15. ### 输出的信息大概如下:
  16. ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
  17. ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
  18.  
  19. ### appender.stdout输出到控制台 ###
  20. log4j.appender.stdout = org.apache.log4j.ConsoleAppender
  21. log4j.appender.stdout.Target = System.out
  22. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
  23. log4j.appender.stdout.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
  24.  
  25. ### appender.D输出Debug信息到日志文件 E://logs/error.log ###
  26. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
  27. log4j.appender.D.File = E://Log//Log4j//log4j_debug.log
  28. log4j.appender.D.Append = true
  29. log4j.appender.D.Threshold = DEBUG
  30. log4j.appender.D.layout = org.apache.log4j.PatternLayout
  31. log4j.appender.D.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
  32.  
  33. ### appender.D输出Error信息到日志文件 E://logs/error.log ###
  34. log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
  35. log4j.appender.E.File = E://Log//Log4j//log4j_error.log
  36. log4j.appender.E.Append = true
  37. log4j.appender.E.Threshold = ERROR
  38. log4j.appender.E.layout = org.apache.log4j.PatternLayout
  39. log4j.appender.E.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n

4、写测试类Log4jTest.java

  1. package cn.darkranger.log.log4j;
  2.  
  3. import org.apache.log4j.Logger;
  4. import org.apache.log4j.PropertyConfigurator;
  5. import org.junit.Test;
  6.  
  7. public class Log4jTest {
  8. private static Logger logger = Logger.getLogger(Log4jTest.class);
  9.  
  10. static {
  11.  
  12. // **** 在JavaWeb中一般通过下面方式配置 ****
  13. // <context-param>
  14. // <param-name>log4jConfigLocation</param-name>
  15. // <param-value>/WEB-INF/classes/log4j.properties</param-value>
  16. // </context-param>
  17. // <listener>
  18. // <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  19. // </listener>
  20.  
  21. // **** 在Java项目中 ****
  22. // 手动读取配置文件
  23. // 读取的文件应该是log4j.properties,由于在log4j.properties中中文会转化为Unicode码,将文件修改为log4j.txt
  24.  
  25. PropertyConfigurator.configure("config/log4j.txt");
  26. }
  27.  
  28. @Test
  29. public void test01() {
  30. // 等级从上到下依次下降
  31. // 灾难、严重
  32. logger.fatal("this is fatal!");
  33. // 错误
  34. logger.error("this is error!");
  35. // 警告
  36. logger.warn("this is warn!");
  37. // 信息
  38. logger.info("this is info!");
  39. // 调试
  40. logger.debug("this is debug!");
  41. // 追踪
  42. logger.trace("this is trace!");
  43. }
  44. }

测试:

控制台输出:

  1. [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)]
  2. [Level: FATAL] - Msg: this is fatal!
  3. [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)]
  4. [Level: ERROR] - Msg: this is error!
  5. [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:36)]
  6. [Level: WARN ] - Msg: this is warn!
  7. [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:38)]
  8. [Level: INFO ] - Msg: this is info!
  9. [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:40)]
  10. [Level: DEBUG] - Msg: this is debug!

文件输出:

E:\Log\Log4j\log4j_debug.log

  1. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)]
  2. [Level: FATAL] - Msg: this is fatal!
  3. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)]
  4. [Level: ERROR] - Msg: this is error!
  5. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:36)]
  6. [Level: WARN ] - Msg: this is warn!
  7. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:38)]
  8. [Level: INFO ] - Msg: this is info!
  9. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:40)]
  10. [Level: DEBUG] - Msg: this is debug!

E:\Log\Log4j\log4j_error.log

  1. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)]
  2. [Level: FATAL] - Msg: this is fatal!
  3. [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)]
  4. [Level: ERROR] - Msg: this is error!

Java日志组件2---Log4j(org.apache.log4j.Logger)的更多相关文章

  1. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

  2. 转:java日志组件介绍(common-logging,log4j,slf4j,logback )

    原网址:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging common-logging是 ...

  3. 【转】java日志组件介绍(common-logging,log4j,slf4j,logback )

    common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, comm ...

  4. 五分钟秒懂Java日志组件

    Java中有许多种日志记录方式,有些API有占位符,有些API没占位符,初学的人可能会搞不清楚这些日志组件的由来.我一开始的时候也是很懵逼的,后来一点点弄懂了于是就又了这篇文章. 在Java中进行日志 ...

  5. Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新

    Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...

  6. 2015第30周四Java日志组件

    Java 日志 API 从功能上来说,日志 API 本身所需求的功能非常简单,只需要能够记录一段文本即可.API 的使用者在需要进行记录时,根据当前的上下文信息构造出相应的文本信息,调用 API 完成 ...

  7. Java日志组件1---Jdk自带Logger(java.util.logging.Logger)

    最近在看日志的一些东西,发现利用JDK自带的log也可以简单的实现日志的输出,将日志写入文件的过程记录如下: 1.新建LogUtil.Java( 里面写了几个静态方法,为log设置等级.添加log控制 ...

  8. Java 日志

    Java日志: 参考博客:http://www.importnew.com/16331.html 当日志中包含满足特定条件的记录时,触发相应的通知机制,或者在程序运行出现错误时,快速的定位潜在的问题源 ...

  9. java中的日志组件-log4j

    1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一 ...

随机推荐

  1. ROS Learning-024 (提高篇-002) rviz的安装和使用

    ROS 提高篇-002 - rviz 的安装和使用 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS ...

  2. Halcon从某一个图片以指定区域绘制到另一个图像

    ************************************************************* * Halcon从某一个图片以指定区域绘制到另一个图像 * Author: ...

  3. 718C Sasha and Array

    传送门 题目 Sasha has an array of integers a1, a2, ..., an. You have to perform m queries. There might be ...

  4. Luogu 3168 [CQOI2015]任务查询系统

    区间修改单点查询,又观察到是一个k小,考虑主席树上做差分 一开始样例疯狂挂,后来发现主席树在一个历史版本上只能修改一次,所以要开2*n个根结点,记录一下每个时间对应的根结点编号 然后80分,考虑到当一 ...

  5. 2015年第六届蓝桥杯省赛T10 生命之树(树形dp+Java模拟vector)

    生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  6. 十天入门java教程 Day02

    1,常量,变量的理解 常量,程序运行过程中,不能改变的,叫常量. 变量,程序运行过程中,改变的,叫变量. 2,变量的理解 变量,用来存储数据的,数据类型,存放哪种数据的种类. 变量的概念:程序运行期间 ...

  7. recommonmark

    一 简要介绍 recommonmark是个到commonMark文档的兼容性桥,那么什么是commonMark是什么的呢?CommonMark是规范版的markdown,下边是部分commonmark ...

  8. VS2015无法创建C++工程解决方法!!

    VS2015默认安装时候没有安装C++,如果安装C++没有选择全部C++项目,则无法创建C++工程,在控制面板里的删除程序中,选择VS2015,随后选择修改,把C++项目都选择上就可以了,这样安装完毕 ...

  9. go语言实战教程之 后台管理页面统计功能开发(1)

    本节内容我们将学习开发实现后台管理平台页面统计功能开发的功能接口,本章节内容将涉及到多种请求路由的方式. 功能介绍 后台管理平台不仅是功能管理平台,同时还是数据管理平台.从数据管理平台角度来说,在管理 ...

  10. 【三支火把】--- 关于UEFI&PCD的总结介绍

    1个人理解 个人理解PCD基本等同于Token,应当算是一种描述性语言,按照规定书写好PCD的配置档,在编译的过程中,会根据你的配置生成同等含义的C文档,而在C文档中对应会出现相应的define或者变 ...