您的位置:首页 > 运维架构

Log4j 学习笔记(二)Log4j快速入门配置文件log4j.properties

2016-10-25 23:54 627 查看
在该教程中,我们将展示使用经典的log4j 1.2.x记录java应用程序中的debug或者error级别的日志信息。

更多精彩请阅读 东陆之滇的csdn博客:http://blog.csdn.net/zixiao217

1. 工程目录

Maven风格的工程目录结构:



2. 引用Log4j

在pom.xml中引入依赖:

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>


如果你不是maven的使用者,请移步Log4j官网下载jar包手动添加到你的工程的library中。

3. log4j.properties

创建一个
log4j.properties
文件放到resources 目录下。

注意

1.单独的java应用,确保编译后log4j.properties在你的project/classes目录下

2.java web应用,确保编译后log4j.properties在WEB-INF/classes目录下

log4j.properties

# 日志收集器的操作
log4j.rootLogger=DEBUG, stdout, file

# 将日志信息定向到控制台
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} %-5p %c{1}:%L - %m%n

# 将日志信息定向到文件中
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


注意:为了更深理解
ConversionPattern
的配置,可以参见Log4j模式布局指南

我们来梳理一下:

%d{yyyy-MM-dd HH:mm:ss} = 设置日期时间格式, 参考 SimpleDateFormat JavaDoc.

%-5p = 设置日志的优先级, 像DEBUG 或者ERROR级别. -5 是可选的, 为了打印漂亮的格式.

%c{1} = 我们通过getLogger()得到的日志名字, 可以参见Log4j模式布局指南.

%L = 记录行号.

%m%n = 日志和中断行的信息.

日志信息示例:

2014-07-02 20:52:39 DEBUG className:200 - This is debug message
2014-07-02 20:52:39 DEBUG className:201 - This is debug message2


4. Demo - 怎样记录日志信息?

要记录日志消息,首先需要声明一个
final static
的logger并定一个名字,通常我们使用包名.类名的全名形式。

final static Logger logger = Logger.getLogger(classname.class);


然后,日志信息也有不同的级别,例如,debug、info、warn、error和fatal。通常我们不只需要记录debug和error级别的日志。

//logs a debug message
if(logger.isDebugEnabled()){
logger.debug("This is debug");
}

//logs an error message with parameter
logger.error("This is error : " + parameter);

//logs an exception thrown from somewhere
logger.error("This is error", exception);


示例:设置debug级别日志

log4j.properties:

log4j.rootLogger=DEBUG, stdout

#...


HelloExample.java:

package org.byron4j.helloLog4j;

import org.apache.log4j.Logger;

public class HelloExample{

final static Logger logger = Logger.getLogger(HelloExample.class);

public static void main(String[] args) {

HelloExample obj = new HelloExample();
obj.runMe("http://blog.csdn.net/zixiao217");

}

private void runMe(String parameter){

if(logger.isDebugEnabled()){
logger.debug("This is debug : " + parameter);
}

if(logger.isInfoEnabled()){
logger.info("This is info : " + parameter);
}

logger.warn("This is warn : " + parameter);
logger.error("This is error : " + parameter);
logger.fatal("This is fatal : " + parameter);

}

}


日志输出:

2016-10-25 20:52:39 DEBUG HelloExample:19 - This is debug : http://blog.csdn.net/zixiao217 2016-10-25 20:52:39 INFO  HelloExample:23 - This is info : http://blog.csdn.net/zixiao217 2016-10-25 20:52:39 WARN  HelloExample:26 - This is warn : http://blog.csdn.net/zixiao217 2016-10-25 20:52:39 ERROR HelloExample:27 - This is error : http://blog.csdn.net/zixiao217 2016-10-25 20:52:39 FATAL HelloExample:28 - This is fatal : http://blog.csdn.net/zixiao217[/code] 

示例:设置error级别日志

log4j.properties:

log4j.rootLogger=ERROR, stdout

#...


执行HelloExample.java将输出:

2016-10-25 20:56:02 ERROR HelloExample:27 - This is error : http://blog.csdn.net/zixiao217 2016-10-25 20:56:02 FATAL HelloExample:28 - This is fatal : http://blog.csdn.net/zixiao217[/code] 
我们看一下Log4j的Priority 类:

package org.apache.log4j;

public class Priority {

public final static int OFF_INT = Integer.MAX_VALUE;
public final static int FATAL_INT = 50000;
public final static int ERROR_INT = 40000;
public final static int WARN_INT  = 30000;
public final static int INFO_INT  = 20000;
public final static int DEBUG_INT = 10000;
//public final static int FINE_INT = DEBUG_INT;
public final static int ALL_INT = Integer.MIN_VALUE;

...
}


如果在
log4j.properties
定义了日志级别,则打印日支时只有级别值大于等于它的才会记录。

5. Demo - 怎样记录一个异常?

示例展示了使用Log4j记录异常信息:

package org.byron4j.helloLog4j;

import org.apache.log4j.Logger;

public class HelloExample2{

final static Logger logger = Logger.getLogger(HelloExample2.class);

public static void main(String[] args) {

HelloExample2 obj = new HelloExample2();

try{
obj.divide();
}catch(ArithmeticException ex){
logger.error("Sorry, something wrong!", ex);
}

}

private void divide(){

int i = 10 /0;

}

}


输出:

2016-10-26 00:52:39 ERROR HelloExample2:15 - Sorry, something wrong!
java.lang.ArithmeticException: / by zero
at org.byron4j.helloLog4j.HelloExample2.divide(HelloExample2.java:22)
at org.byron4j.helloLog4j.HelloExample2.main(HelloExample2.java:13)


入门示例结束了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: