Java中的日志——Java.util.logging、log4j、commons-logging
2015-10-20 22:40
555 查看
Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。其中log4j和commons-logging都是apache软件基金会的开源项目。这三种方式的区别如下:
Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。
log4j,最强大的记录日志的方式。可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。
commons-logging,最综合和常见的日志记录方式,是Java中的一个日志接口,一般会与log4j一起使用。自带SimpleLog可用于日志记录。
【例1.1】:日志的简单使用
[java] view
plaincopy
package lwf.log.test;
import java.util.logging.Logger;
public class LogTest {
static String strClassName = LogTest.class.getName();
static Logger logger = Logger.getLogger(strClassName);
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.warning("除数不能为0.");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
System.out.println(division(5, 0));
}
}
结果:
从这个例子中你会看到控制台上输出了日期时间,类名,方法名和“[warning]除数不能为0.”的信息。
Logger是Java Logging API中的一个类,Logger.getLogger方法创建了一个Logger实例。每一个Logger实例都必须有个名称,通常的做法是使用类名称定义Logger实例。
logger.warning方法用来输出日志信息,除了warning处,还有severe、info等。我们可以把【例1】再改一下,让其输出各种日志信息。
【例1.2】:日志的级别
[java] view
plaincopy
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.severe("[severe]除数不能为0.");
logger.warning("[warning]除数不能为0.");
logger.info("[info]除数不能为0.");
logger.config("[config]除数不能为0.");
logger.fine("[fine]除数不能为0.");
logger.finer("[finer]除数不能为0.");
logger.finest("[finest]除数不能为0.");
e.printStackTrace();
}
return result;
}
结果:
Java Logging API提供了七个日志级别用来控制输出。这七个级别分别是:
但在上面的例子中我们可以看到只输出了SEVERE、WARNING、INFO三个等级的日志,并没有如我们相像中的好样输出各个级别的日志信息。这是因为默认日志输出级别的设置是info,也就是说只有info或它以上的级别被输出,它以下的级别不被输出。那如何修改这个设置呢?
日志(Log)的配制:
1.代码设置
使用setLevel();但这种方式不能改变console的级别,只能改变输出到文件的日志的级别。
2.修改logging.properties
默认的外部配置文件 是JRE中lib/logging.properties文件。你可以打开这个文件,修改以下两行为:
这种方式会影响jre下所有用户。
为了不影响到所有的用户,我们还可以通过LogManager的readConfiguration(InputStream ins)读取指定的配制文件。
【例1.3】:LogManager管理日志
[java] view
plaincopy
package lwf.log.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class LogTest {
static String strClassName = LogTest.class.getName();
static Logger logger = Logger.getLogger(strClassName);
static LogManager logManager = LogManager.getLogManager();
static {
InputStream inputStream = null;
try {
//读取配制文件
inputStream = LogTest.class.getClassLoader().getResourceAsStream("log.properties");
logManager.readConfiguration(inputStream);
//添加Logger
logManager.addLogger(logger);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.severe("[severe]除数不能为0.");
logger.warning("[warning]除数不能为0.");
logger.info("[info]除数不能为0.");
logger.config("[config]除数不能为0.");
logger.fine("[fine]除数不能为0.");
logger.finer("[finer]除数不能为0.");
logger.finest("[finest]除数不能为0.");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
System.out.println(division(5, 0));
}
}
log.properties:
这样,用户就可以自己定义配制文件了。在E:\Test下可以看到输出的日志文件Log0.log
java.util.logging包中类的关系图如下:
参考文章:
/article/2661795.html
1.项目串导入log4j的jar包
如Eclipse下项目名右键,Build Path\Add Libraries,添加一组用户自己的jar包。项目结构如下:
2.修改log4j的配制文件,设置日志输出的级别、格式等
log4j的log有5个级别:FATAL(严重的 )、ERROR(错误 )、WARN(警告)、INFO(信息)、DEBUG(调试 )。
3.在项目代码中适当添加日志。
【例2.1】
log4j.properties:
Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。
log4j,最强大的记录日志的方式。可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。
commons-logging,最综合和常见的日志记录方式,是Java中的一个日志接口,一般会与log4j一起使用。自带SimpleLog可用于日志记录。
1.Java.util.logging
【例1.1】:日志的简单使用[java] view
plaincopy
package lwf.log.test;
import java.util.logging.Logger;
public class LogTest {
static String strClassName = LogTest.class.getName();
static Logger logger = Logger.getLogger(strClassName);
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.warning("除数不能为0.");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
System.out.println(division(5, 0));
}
}
结果:
从这个例子中你会看到控制台上输出了日期时间,类名,方法名和“[warning]除数不能为0.”的信息。
Logger是Java Logging API中的一个类,Logger.getLogger方法创建了一个Logger实例。每一个Logger实例都必须有个名称,通常的做法是使用类名称定义Logger实例。
logger.warning方法用来输出日志信息,除了warning处,还有severe、info等。我们可以把【例1】再改一下,让其输出各种日志信息。
【例1.2】:日志的级别
[java] view
plaincopy
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.severe("[severe]除数不能为0.");
logger.warning("[warning]除数不能为0.");
logger.info("[info]除数不能为0.");
logger.config("[config]除数不能为0.");
logger.fine("[fine]除数不能为0.");
logger.finer("[finer]除数不能为0.");
logger.finest("[finest]除数不能为0.");
e.printStackTrace();
}
return result;
}
结果:
Java Logging API提供了七个日志级别用来控制输出。这七个级别分别是:
级别 | SEVERE | WARNING | INFO | CONFIG | FINE | FINER | FINEST |
调用方法 | severe() | warning() | info() | config() | fine() | finer() | finest() |
含意 | 严重 | 警告 | 信息 | 配置 | 良好 | 较好 | 最好 |
日志(Log)的配制:
1.代码设置
使用setLevel();但这种方式不能改变console的级别,只能改变输出到文件的日志的级别。
2.修改logging.properties
默认的外部配置文件 是JRE中lib/logging.properties文件。你可以打开这个文件,修改以下两行为:
.level=ALL //... java.util.logging.ConsoleHandler.level = ALL |
为了不影响到所有的用户,我们还可以通过LogManager的readConfiguration(InputStream ins)读取指定的配制文件。
【例1.3】:LogManager管理日志
[java] view
plaincopy
package lwf.log.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class LogTest {
static String strClassName = LogTest.class.getName();
static Logger logger = Logger.getLogger(strClassName);
static LogManager logManager = LogManager.getLogManager();
static {
InputStream inputStream = null;
try {
//读取配制文件
inputStream = LogTest.class.getClassLoader().getResourceAsStream("log.properties");
logManager.readConfiguration(inputStream);
//添加Logger
logManager.addLogger(logger);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static double division(int value1, int value2) {
double result = 0;
try {
result = value1 / value2;
} catch(ArithmeticException e) {
logger.severe("[severe]除数不能为0.");
logger.warning("[warning]除数不能为0.");
logger.info("[info]除数不能为0.");
logger.config("[config]除数不能为0.");
logger.fine("[fine]除数不能为0.");
logger.finer("[finer]除数不能为0.");
logger.finest("[finest]除数不能为0.");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
System.out.println(division(5, 0));
}
}
log.properties:
# "handlers" specifies a comma separated list of log Handler #handlers= java.util.logging.ConsoleHandler handlers= java.util.logging.FileHandler # Default logging level. .level= CONFIG # default file output is in "E:\Test" directory. java.util.logging.FileHandler.pattern = E:/Test/Log%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter # Limit the message that are printed on the console to CONFIG and above. java.util.logging.ConsoleHandler.level = CONFIG java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Facility specific properties.Provides extra control for each logger. # For example, set the com.xyz.foo logger to only log SEVERE messages: com.xyz.foo.level = SEVERE |
java.util.logging包中类的关系图如下:
参考文章:
/article/2661795.html
2.log4j
1.项目串导入log4j的jar包如Eclipse下项目名右键,Build Path\Add Libraries,添加一组用户自己的jar包。项目结构如下:
2.修改log4j的配制文件,设置日志输出的级别、格式等
log4j的log有5个级别:FATAL(严重的 )、ERROR(错误 )、WARN(警告)、INFO(信息)、DEBUG(调试 )。
3.在项目代码中适当添加日志。
【例2.1】
log4j.properties:
#set log level: show debug, info, error log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender which outputs to System.out. #log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1=org.apache.log4j.FileAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout #out log4j.appender.A1.File=E:/test/log4j.log # set log output format's style log4j.appender.A1.layout=org.apache.log4j.TTC |
相关文章推荐
- 关于java中 == 和 equals 的详解
- struts2拦截器 默认拦截器 默认跳转 全局异常
- 带你走进EJB--那些跟EJB容器相关的那些Java概念
- Android Wear Eclipse开发环境搭建
- JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解
- java容器--List集合中的体系结构分析(一)
- java中重载与重写的区别
- java操作excel
- Java技术原理详解
- java的垃圾回收机制知识点
- java实现Composite(组合)模式
- java读取txt文件,并统计每行中每个字母出现的次数,并将产生的数字保存到一个新的txt文件中(有加分)
- eclipse下使用API操作HDFS
- 日常总结(七)Java各种数据库连接
- JAVA基础学习day25--Socket基础二-多线程
- java按行读取txt文件并按顺序放到map对象里面实例
- java定时器使用
- Java对象初始化
- JAVA基础学习(二十七)--反射机制
- JAVA基础学习(二十六)--正则表达式