在网上看了很多例子,对Log4j有些了解,但感觉其日志的显示格式不太好,日志多了很难查看,于是就写了个类,初始化Log4j的基本参数,然后添加了换行功能,具体步骤如下:
1、下载Log4j.jar包,将下载后的文件名改为:log4j-1.2.14.jar,下载地址:http://dl1.csdn.net/down3/20070605/05181339103.jar
2、启动MyEclipse或其它IDE工具,新建一个Java工程,名称为“LogTest”。
3、新建一个包,名为“org”
4、在“org”包里新建一个类,名称为:LinLog.java,再创建一个类,名称为:TestLog4j.java
5、在“org”包里创建一个properties文件,可先新建一个“Untitled Text File”类型的文件,编写代码后再保存为“log4j.properties”
6、运行TestLog4j.java,日志显示结果有两种情况,一是显示在控制台,二是显示在名为“lin-log.txt”文本文件中
LinLog类的代码
package
org;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/** */ /**
* 自定义的日志记录类,使用Java的properties文件形式配置Log4j,
* 使用本类的同时还需要一个properties的配置文件,用于配置Log4j的参数
* @author linyiteng
*/
public class LinLog ... {
/** *//**
* Log4j的一个实例对象
*/
Logger logger;
/** *//**
* 构造方法,对一些基本参数进行设置
* @param className Log4j的实例名称,一般都使用当前操作类的类名,比如一个Test类,就应该设置为:Test.class.getName()
* @param folder 配置文件(.properties)的所在目录
* @param file 配置文件(.properties)的文件名
* @param level 日志记录的级别,1代表DEBUG,2代表INFO,3代表WARN,4代表ERROR,5代表FATAL,其它数字代表ALL,
* 一般代码调试时设置为1,系统上线后设置为3
*/
public LinLog(String className, String folder, String file, int level)...{
logger = Logger.getLogger(className);
String path = getPath(folder);
PropertyConfigurator.configure(path + file);
setLevel(level);
}
/** *//**
* 获取指定文件夹所在的绝对路径
* @param folder 指定的文件夹
* @return 该文件夹的绝对路径
*/
private String getPath(String folder)...{
String path = this.getClass().getClassLoader().getResource(folder).getPath();
return path.substring(1).replace("/", "/") + "/";
}
/** *//**
* 设置日志记录的显示级别
* @param level 显示级别,在1-5的范围内,级别越高,表明显示的错误级别越严重,显示的日志记录数越少
*/
private void setLevel(int level)...{
switch(level)...{
case 1:
logger.setLevel(Level.DEBUG);
break;
case 2:
logger.setLevel(Level.INFO);
break;
case 3:
logger.setLevel(Level.WARN);
break;
case 4:
logger.setLevel(Level.ERROR);
break;
case 5:
logger.setLevel(Level.FATAL);
break;
default:
logger.setLevel(Level.ALL);
}
}
/** *//**
* 显示日志记录的开始标志
*/
public void start()...{
logger.fatal("----------------------- START -----------------------");
}
/** *//**
* 显示日志记录的结束标志,同时加上两个换行
*/
public void end()...{
logger.fatal("----------------------- END ----------------------- ");
}
/** *//**
* 返回一个Log4j的实例对象,非常重要的方法,在调用debug()等记录方法之前须先调用,如this.yiteng().debug("记录内容");
* @return 当前创建的logger对象
*/
public Logger yiteng()...{
return logger;
}
}
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/** */ /**
* 自定义的日志记录类,使用Java的properties文件形式配置Log4j,
* 使用本类的同时还需要一个properties的配置文件,用于配置Log4j的参数
* @author linyiteng
*/
public class LinLog ... {
/** *//**
* Log4j的一个实例对象
*/
Logger logger;
/** *//**
* 构造方法,对一些基本参数进行设置
* @param className Log4j的实例名称,一般都使用当前操作类的类名,比如一个Test类,就应该设置为:Test.class.getName()
* @param folder 配置文件(.properties)的所在目录
* @param file 配置文件(.properties)的文件名
* @param level 日志记录的级别,1代表DEBUG,2代表INFO,3代表WARN,4代表ERROR,5代表FATAL,其它数字代表ALL,
* 一般代码调试时设置为1,系统上线后设置为3
*/
public LinLog(String className, String folder, String file, int level)...{
logger = Logger.getLogger(className);
String path = getPath(folder);
PropertyConfigurator.configure(path + file);
setLevel(level);
}
/** *//**
* 获取指定文件夹所在的绝对路径
* @param folder 指定的文件夹
* @return 该文件夹的绝对路径
*/
private String getPath(String folder)...{
String path = this.getClass().getClassLoader().getResource(folder).getPath();
return path.substring(1).replace("/", "/") + "/";
}
/** *//**
* 设置日志记录的显示级别
* @param level 显示级别,在1-5的范围内,级别越高,表明显示的错误级别越严重,显示的日志记录数越少
*/
private void setLevel(int level)...{
switch(level)...{
case 1:
logger.setLevel(Level.DEBUG);
break;
case 2:
logger.setLevel(Level.INFO);
break;
case 3:
logger.setLevel(Level.WARN);
break;
case 4:
logger.setLevel(Level.ERROR);
break;
case 5:
logger.setLevel(Level.FATAL);
break;
default:
logger.setLevel(Level.ALL);
}
}
/** *//**
* 显示日志记录的开始标志
*/
public void start()...{
logger.fatal("----------------------- START -----------------------");
}
/** *//**
* 显示日志记录的结束标志,同时加上两个换行
*/
public void end()...{
logger.fatal("----------------------- END ----------------------- ");
}
/** *//**
* 返回一个Log4j的实例对象,非常重要的方法,在调用debug()等记录方法之前须先调用,如this.yiteng().debug("记录内容");
* @return 当前创建的logger对象
*/
public Logger yiteng()...{
return logger;
}
}
TestLog4j类的代码
package
org;
public class TestLog4j ... {
public static void main(String[] args) ...{
LinLog ll = new LinLog(TestLog4j.class.getName(), "org", "log4j.properties", 0);
ll.start();
ll.yiteng().debug("The level of message is DEBUG");
ll.yiteng().info("The level of message is INFO");
ll.yiteng().warn("The level of message is WARN");
ll.yiteng().error("The level of message is ERROR");
ll.yiteng().fatal("The level of message is FATAL");
ll.end();
}
}
public class TestLog4j ... {
public static void main(String[] args) ...{
LinLog ll = new LinLog(TestLog4j.class.getName(), "org", "log4j.properties", 0);
ll.start();
ll.yiteng().debug("The level of message is DEBUG");
ll.yiteng().info("The level of message is INFO");
ll.yiteng().warn("The level of message is WARN");
ll.yiteng().error("The level of message is ERROR");
ll.yiteng().fatal("The level of message is FATAL");
ll.end();
}
}
log4j.properties配置信息
log4j.rootLogger
=
DEBUG, ca, drfa
log4j.appender.ca = org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout = org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern =%- 5p ( % F: % L) # % m % n
log4j.appender.drfa = org.apache.log4j.DailyRollingFileAppender
log4j.appender.drfa.File = lin -error- log.txt
log4j.appender.drfa.Append = true
log4j.appender.ca = org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout = org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern =%- 5p ( % F: % L) # % m % n
log4j.appender.drfa = org.apache.log4j.DailyRollingFileAppender
log4j.appender.drfa.File = lin -error- log.txt
log4j.appender.drfa.Append = true
log4j.appender.drfa.Threshold = ERROR
log4j.appender.drfa.layout = org.apache.log4j.PatternLayout
log4j.appender.drfa.layout.ConversionPattern =% d ... {yyyy-MM-dd HH:mm:ss} %- 5p % c # % m % n
log4j.appender.drfa.layout = org.apache.log4j.PatternLayout
log4j.appender.drfa.layout.ConversionPattern =% d ... {yyyy-MM-dd HH:mm:ss} %- 5p % c # % m % n
本配置文件设置了两种日志记录方式,ca代表控制台,drfa代表文本文件,该名称为:lin-error-log.txt,只显示级别为ERROR以上的日志信息。关于这些配置参数,网上很多都有说明,这里仅用了最为常用的参数。
日志显示 -- 控制台
FATAL (LinLog.java:
74
) #
-----------------------
START
-----------------------
DEBUG (TestLog4j.java: 9 ) # The level of message is DEBUG
INFO (TestLog4j.java: 10 ) # The level of message is INFO
WARN (TestLog4j.java: 11 ) # The level of message is WARN
ERROR (TestLog4j.java: 12 ) # The level of message is ERROR
FATAL (TestLog4j.java: 13 ) # The level of message is FATAL
FATAL (LinLog.java: 81 ) # ----------------------- END -----------------------
DEBUG (TestLog4j.java: 9 ) # The level of message is DEBUG
INFO (TestLog4j.java: 10 ) # The level of message is INFO
WARN (TestLog4j.java: 11 ) # The level of message is WARN
ERROR (TestLog4j.java: 12 ) # The level of message is ERROR
FATAL (TestLog4j.java: 13 ) # The level of message is FATAL
FATAL (LinLog.java: 81 ) # ----------------------- END -----------------------
日志显示 -- 文本文件
2007
-
12
-
20
16
:
24
:
47
FATAL org.TestLog4j #
-----------------------
START
-----------------------
2007 - 12 - 20 16 : 24 : 47 ERROR org.TestLog4j # The level of message is ERROR
2007 - 12 - 20 16 : 24 : 47 FATAL org.TestLog4j # The level of message is FATAL
2007 - 12 - 20 16 : 24 : 47 FATAL org.TestLog4j # ----------------------- END -----------------------
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # ----------------------- START -----------------------
2007 - 12 - 20 16 : 24 : 49 ERROR org.TestLog4j # The level of message is ERROR
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # The level of message is FATAL
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # ----------------------- END -----------------------
2007 - 12 - 20 16 : 24 : 47 ERROR org.TestLog4j # The level of message is ERROR
2007 - 12 - 20 16 : 24 : 47 FATAL org.TestLog4j # The level of message is FATAL
2007 - 12 - 20 16 : 24 : 47 FATAL org.TestLog4j # ----------------------- END -----------------------
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # ----------------------- START -----------------------
2007 - 12 - 20 16 : 24 : 49 ERROR org.TestLog4j # The level of message is ERROR
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # The level of message is FATAL
2007 - 12 - 20 16 : 24 : 49 FATAL org.TestLog4j # ----------------------- END -----------------------