如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用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:

### 设置logger级别 ###
log4j.rootLogger = debug,stdout,D,E ### 输出格式解释:
### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
### %c: 全类名
### %M: 调用的方法名称
### %F:%L 类名:行号(在控制台可以追踪代码)
### %n: 换行
### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
### %m: 日志信息 ### 输出的信息大概如下:
### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
### [Level: 5个字符的等级名称] - Msg: 输出信息 换行 ### appender.stdout输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n ### appender.D输出Debug信息到日志文件 E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://Log//Log4j//log4j_debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n ### appender.D输出Error信息到日志文件 E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = E://Log//Log4j//log4j_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
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

package cn.darkranger.log.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.junit.Test; public class Log4jTest {
private static Logger logger = Logger.getLogger(Log4jTest.class); static { // **** 在JavaWeb中一般通过下面方式配置 ****
// <context-param>
// <param-name>log4jConfigLocation</param-name>
// <param-value>/WEB-INF/classes/log4j.properties</param-value>
// </context-param>
// <listener>
// <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
// </listener> // **** 在Java项目中 ****
// 手动读取配置文件
// 读取的文件应该是log4j.properties,由于在log4j.properties中中文会转化为Unicode码,将文件修改为log4j.txt PropertyConfigurator.configure("config/log4j.txt");
} @Test
public void test01() {
// 等级从上到下依次下降
// 灾难、严重
logger.fatal("this is fatal!");
// 错误
logger.error("this is error!");
// 警告
logger.warn("this is warn!");
// 信息
logger.info("this is info!");
// 调试
logger.debug("this is debug!");
// 追踪
logger.trace("this is trace!");
}
}

测试:

控制台输出:

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

文件输出:

E:\Log\Log4j\log4j_debug.log

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

E:\Log\Log4j\log4j_error.log

[2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)]
[Level: FATAL] - Msg: this is fatal!
[2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)]
[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. 项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)

    1. easyui DataGrid行编辑功能 2. 运单waybill快速录入 3. 权限demo演示-了解 4. Apache shiro安全框架概述 5. 权限模块数据模型 6. 基于shiro ...

  2. Spring IOC容器解析及实现原理

    最近一段时间,“容器”两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助sprin ...

  3. head first 设计模式 策略模式

    HEAD FIRST:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 设计模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换.本 ...

  4. ZROI2018普转提day1t4

    传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...

  5. js获取指定小时日期格式化

    不得不感叹一下,聪明的程序员写的代码真是让人惊奇 找了一圈格式化代码的方式,下面的这个使用了一个 slice 函数,真是厉害 https://stackoverflow.com/questions/4 ...

  6. Entity Framework Tutorial Basics(15):Querying with EDM

    Querying with EDM: We have created EDM, DbContext, and entity classes in the previous sections. Here ...

  7. getline()函数的两种用法

    getline()函数的输入流对象可以是标准输入流对象cin,也可以是一个文件输入流对象fin; (1)输入流对象的成员函数(有三个参数,一般除非需要自己选定停止符,并不推荐使用): basic_is ...

  8. windows脚本设置网络IP地址

    需求描述 不通的网络环境下,可能需要设置静态IP地址,或设置为动态获取,每次重复手动的配置费时费力,通过脚本可以实现一键设置 脚本实现 1.设置静态IP 1.1新建文本文档,复制粘贴如下内容 nets ...

  9. Airtest中pcoc的常用方法

    a=poco(resourceId="com.wuba.zhuanzhuan:id/a0q").get_text() #获取resourceId文字信息(用于界面有text元素的) ...

  10. completer自动完成

    由于项目需要,在输入框中要做一些输入限制的同时,更加要求用户体验,提供一些自动完成设置.所以有需求,总会有解决方式,下面说一下自动完成插件的原理: html的body部分: <span styl ...