[b]第一节 概述[/b]
Log4j诞生,为减轻对成千上万的
(e为Throwable,包括Exception和Error)
语句的维护成本。
Log4j能够做更多的事。
通过仅修改配置文件,而不修改程序代码,控制日志记录语句是否记录日志,控制系统资源消耗。
本手册代码演示在eclipse中编辑。
[b]第二节 简单使用Logger类[/b]
选一个新的workspace, 创建一个新的项目。
导入org.apache.log4j,编写一个示例类,用上Logger类的日志记录方法。
LoggerSnippet.java
说明:
1、使用时,Logger是通过工厂方法获得的。不通过new 创建出来的。(思考,为什么要通过工厂方法)
2、获得Logger的工厂方法的参数,一般为调用类的class。工厂方法使用类的类名,标示这个Logger。(思考,为什么要传入这个参数,可以传入其他吗)
3、Logger默认的日志级别分6级,trace、debug、info、warn、error、fatal。(log4j_1.2.12新添了trace在debug之下,之前为5个等级)。
[b]第三节 简单配置log4j,让log4j工作[/b]
执行上面的类,控制台显示如下信息。
[color=red]log4j:WARN No appenders could be found for logger (org.smiledsun.snippets.logger.LoggerSnippet).
log4j:WARN Please initialize the log4j system properly.[/color]
原因:没有加载log4j配置文件。
解决方法,在任意位置,编写如下内容的log4j.xml文件(文件名自定)。
再在执行你的应用程序时,配置虚拟机参数log4j.configuration为你的log4j.xml文件的URL路径。
场景1:在命令行中执行程序,配置log4j配置文件。
java -Dlog4j.configuration=File:D:\log4j.xml LoggerSnippet
场景2:在Eclipse中执行程序,配置log4j配置文件。
点击主菜单的“Run”->“Run Configurations”弹出“Run configurations”对话框,在左边选中刚刚运行过的“LoggerSnippet”,在右边找到“Arguments”中的“VM arguments:”输入“-Dlog4j.configuration=File:D:\log4j.xml”如附件log4j_run_configurations_vm_arguments.png
场景3:在导出后的eclipse RCP应用程序中,配置log4j配置文件。
打开在eclipse.exe同目录下的eclipse.ini文件(没有则新建一个),添加一行内容
“-Dlog4j.configuration=File:D:\log4j.xml”
补充知识:
1、通过命名行执行java程序的格式如下:java 虚拟机参数 类名 程序参数。
2、-D是java设置系统属性的专有前缀。
可以通过System.getProperty(String key)获得。
3、File是文件协议类型的URL前缀。URL除了http协议类型,还有其他类型。
4、这里的D:log4j.xml可以是绝对URL路径,也可以是相对URL路径。
5、如果你只是在eclipse中执行你的应用程序,则可以在src目录下创建一个名为log4j.xml的文件。就不需要这些配置。
6、为什么是这样?想了解详细信息。
请阅读log4j源码,org.apache.log4j.LogManager.java文件。
再执行上面的类。控制台打印如下结果。
DEBUG - This is a debug message
INFO - This is an info message
WARN - This is a warn message
ERROR - This is an error message
FATAL - This is a fatal message
(注意:没有打印:"This is a trace message.",为什么呢?)
好了。我们的Log4j开始工作了。
[b]第四节 Logger记录日志的方法[/b]
[b]第五节 配置文件[/b]
Log4j配置文件可以是.xml或.properties文件。老的版本只支持.properties。推介使用.xml文件,因为.xml文件结构更清晰、可读性更高,新版本的部分特性.properties文件已经不能配置或难配置了。
log4j默认从系统属性中的log4j.configuration获取log4j配置文件的url,找不到就从classpath中找 log4j.xml文件为配置文件,找不到就从classpath中找 log4j.properties配置文件。如果找不到,就打印上面的出错信息。详情见log4j源码,org.apache.log4j.LogManager.java文件。
详情参考本人日志: Log4j笔记 第一章 简单用上Log4j
可以通过编程的方法加载外部配置文件:使用
org.apache.log4j.PropertyConfigurator类的configure()方法。支持文件路径名,URL,Properties等多种形式。
在找不到配置文件时,也可以Logger.getRootLogger().setLevel(Level.OFF);关闭日志。
Log4j诞生,为减轻对成千上万的
System.out.println();
System.err.println();
e.printStackTrace();
(e为Throwable,包括Exception和Error)
语句的维护成本。
Log4j能够做更多的事。
通过仅修改配置文件,而不修改程序代码,控制日志记录语句是否记录日志,控制系统资源消耗。
本手册代码演示在eclipse中编辑。
[b]第二节 简单使用Logger类[/b]
选一个新的workspace, 创建一个新的项目。
导入org.apache.log4j,编写一个示例类,用上Logger类的日志记录方法。
LoggerSnippet.java
package org.smiledsun.snippets.logger;
import org.apache.log4j.Logger;
public class LoggerSnippet {
/**
* 使用工厂方法获得Logger,
* Logger不通过new 创建出来的
*/
private static final Logger logger = Logger.getLogger(LoggerSnippet.class);
public static void main(String[] args) {
log.trace("This is a trace message.");
log.debug("This is a debug message.");
log.info("This is a info message.");
log.warn("This is a warn message.");
log.error("This is an error message.");
log.fatal("This is a fatal message.");
}
}
说明:
1、使用时,Logger是通过工厂方法获得的。不通过new 创建出来的。(思考,为什么要通过工厂方法)
2、获得Logger的工厂方法的参数,一般为调用类的class。工厂方法使用类的类名,标示这个Logger。(思考,为什么要传入这个参数,可以传入其他吗)
3、Logger默认的日志级别分6级,trace、debug、info、warn、error、fatal。(log4j_1.2.12新添了trace在debug之下,之前为5个等级)。
[b]第三节 简单配置log4j,让log4j工作[/b]
执行上面的类,控制台显示如下信息。
[color=red]log4j:WARN No appenders could be found for logger (org.smiledsun.snippets.logger.LoggerSnippet).
log4j:WARN Please initialize the log4j system properly.[/color]
原因:没有加载log4j配置文件。
解决方法,在任意位置,编写如下内容的log4j.xml文件(文件名自定)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout"/>
</appender>
<root >
<appender-ref ref="CONSOLE"/>
</root>
</log4j:configuration>
再在执行你的应用程序时,配置虚拟机参数log4j.configuration为你的log4j.xml文件的URL路径。
场景1:在命令行中执行程序,配置log4j配置文件。
java -Dlog4j.configuration=File:D:\log4j.xml LoggerSnippet
场景2:在Eclipse中执行程序,配置log4j配置文件。
点击主菜单的“Run”->“Run Configurations”弹出“Run configurations”对话框,在左边选中刚刚运行过的“LoggerSnippet”,在右边找到“Arguments”中的“VM arguments:”输入“-Dlog4j.configuration=File:D:\log4j.xml”如附件log4j_run_configurations_vm_arguments.png
场景3:在导出后的eclipse RCP应用程序中,配置log4j配置文件。
打开在eclipse.exe同目录下的eclipse.ini文件(没有则新建一个),添加一行内容
“-Dlog4j.configuration=File:D:\log4j.xml”
补充知识:
1、通过命名行执行java程序的格式如下:java 虚拟机参数 类名 程序参数。
2、-D是java设置系统属性的专有前缀。
可以通过System.getProperty(String key)获得。
3、File是文件协议类型的URL前缀。URL除了http协议类型,还有其他类型。
4、这里的D:log4j.xml可以是绝对URL路径,也可以是相对URL路径。
5、如果你只是在eclipse中执行你的应用程序,则可以在src目录下创建一个名为log4j.xml的文件。就不需要这些配置。
6、为什么是这样?想了解详细信息。
请阅读log4j源码,org.apache.log4j.LogManager.java文件。
再执行上面的类。控制台打印如下结果。
DEBUG - This is a debug message
INFO - This is an info message
WARN - This is a warn message
ERROR - This is an error message
FATAL - This is a fatal message
(注意:没有打印:"This is a trace message.",为什么呢?)
好了。我们的Log4j开始工作了。
[b]第四节 Logger记录日志的方法[/b]
public void trace(Object message)
记录消息message,级别为trace
public void trace(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为trace
public void debug(Object message)
记录消息message,级别为debug
public void debug(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为debug
public void info(Object message)
记录消息message,级别为info
public void info(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为info
public void warn(Object message)
记录消息message,级别为warn
public void warn(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为warn
public void error(Object message)
记录消息message,级别为error
public void error(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为error
public void fatal(Object message)
记录消息message,级别为fatal
public void fatal(Object message, Throwable t)
记录消息message和异常/错误堆栈信息t,级别为fatal
public void assertLog(boolean assertion, String msg)
如果assertion为false,记录消息msg,级别为error
[b]第五节 配置文件[/b]
Log4j配置文件可以是.xml或.properties文件。老的版本只支持.properties。推介使用.xml文件,因为.xml文件结构更清晰、可读性更高,新版本的部分特性.properties文件已经不能配置或难配置了。
log4j默认从系统属性中的log4j.configuration获取log4j配置文件的url,找不到就从classpath中找 log4j.xml文件为配置文件,找不到就从classpath中找 log4j.properties配置文件。如果找不到,就打印上面的出错信息。详情见log4j源码,org.apache.log4j.LogManager.java文件。
详情参考本人日志: Log4j笔记 第一章 简单用上Log4j
可以通过编程的方法加载外部配置文件:使用
org.apache.log4j.PropertyConfigurator类的configure()方法。支持文件路径名,URL,Properties等多种形式。
在找不到配置文件时,也可以Logger.getRootLogger().setLevel(Level.OFF);关闭日志。