博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java日志组件2---Log4j(org.apache.log4j.Logger)
阅读量:6425 次
发布时间:2019-06-23

本文共 4843 字,大约阅读时间需要 16 分钟。

如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用jdk的自带Log完全可以解决问题。但是,在开发的过程中,大多数项目都比较大,为方便找到程序的bug,都是需要系统的记录日志的。这里边出现了Log4j(Log for Java),Apache 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.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.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.DailyRollingFileAppenderlog4j.appender.D.File = E://Log//Log4j//log4j_debug.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.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.DailyRollingFileAppenderlog4j.appender.E.File = E://Log//Log4j//log4j_error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.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中一般通过下面方式配置 ****        //     
//
log4jConfigLocation
//
/WEB-INF/classes/log4j.properties
//
//
//
org.springframework.web.util.Log4jConfigListener
//
// **** 在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!

 

转载于:https://www.cnblogs.com/wrcold520/p/5587854.html

你可能感兴趣的文章
ionic 字体的导入方法
查看>>
IP路由原理
查看>>
内部类详解
查看>>
洛谷P2726 阶乘 Factorials 数学
查看>>
类加载机制
查看>>
火柴棒等式(2008年NOIP全国联赛提高组)
查看>>
mongodb int型id 自增
查看>>
【转】关于大型网站技术演进的思考(十八)--网站静态化处理—反向代理(10)...
查看>>
Java中的4种代码块
查看>>
Ocelot(七)- 入门
查看>>
生成水杯热气
查看>>
程序员工作心法
查看>>
三个常用的PHP图表类库
查看>>
python中异常处理--raise的使用
查看>>
高中数学与初中数学的接轨点
查看>>
python 安装第三方模块
查看>>
Whitelabel Error Page 专题
查看>>
Spring Data Redis—Pub/Sub(附Web项目源码)
查看>>
RSD和wlwmanifest是什么
查看>>
Linkedin工程师是如何优化他们的Java代码的(转)
查看>>