收藏 分享(赏)

Log4j 入门笔记.doc

上传人:hyngb9260 文档编号:6751350 上传时间:2019-04-22 格式:DOC 页数:10 大小:45.36KB
下载 相关 举报
Log4j 入门笔记.doc_第1页
第1页 / 共10页
Log4j 入门笔记.doc_第2页
第2页 / 共10页
Log4j 入门笔记.doc_第3页
第3页 / 共10页
Log4j 入门笔记.doc_第4页
第4页 / 共10页
Log4j 入门笔记.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、详细讲解 Java 中 log4j 的使用方法2012/3/14 sunny1、Log4j 是什么?Log4j 可以帮助调试(有时候 debug 是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧: http:/jakarta.apache.org/log4j .Log4J 是 Apache 的一个开放源代码项目(http:/logging.apache.org/log4j/docs/),它是一个日志操作包。通过使用 Log4J,可以指定日志信息输出的目的地,控制每一条日志的输出格式,定义日志信息的级别。所有这些功能通过一个配置文件灵活进行配置。2、Log4j 的概念L

2、og4j 中有三个主要的组件,它们分别是 Logger、Appender 和 Layout,Log4j 允许开发人员定义多个 Logger,每个 Logger 拥有自己的名字,Logger 之间通过名字来表明隶属关系。有一个 Logger 称为 Root,它永远存在,它是所有 Logger 组件的“祖先”,它永远存在,且不能通过名字检索或引用, 可以通过 Logger.getRootLogger()方法获得,其它 Logger 通过 Logger.getLogger(String name)方法。配置 root Logger 代码:log4j.rootLogger=INFO,console可在

3、配置文件中方便地配置存在继承关系的 Logger 组件,凡是在符号“.”后面的组件都会成为在符号“.”前面的 Logger 组件的子类。 Logger 组件的继承关系:. 如果子类 Logger 组件没有定义日志级别,则将继承父类的日志级别;. 如果子类 Logger 组件定义了日志级别,就不会继承父类的日志级别;. 黙认情况下, 子类 Logger 组件会继承父类所有的 Appender,把它们加入到自己的 Appener;. 如果把子类 Logger 组件的 additivity 标志设为 false,那么它就不会继承父类Appender。additivity 标志 默认值为 false;

4、Appender 则是用来指明将所有的 log 信息存放到什么地方,Log4j 中支持多种 appender,如 console、files 、GUI components、NT Event Loggers 等,一个 Logger 可以拥有多个 Appender,也就是你既可以将 Log 信息输出到屏幕,同时存储到一个文件中。Layout 的作用是控制 Log 信息的输出方式,也就是格式化输出的信息。一个 Logger 可以有多个 Appender,也就是说日志信息可以同时输出到多个设备上,每个Appender 对应一种 Layout(示例见下图)。 Appender1 Layout Logg

5、er Appender2 LayoutLog4j 中将要输出的 Log 信息定义了 5 种级别,由低到高依次为 DEBUG、INFO、WARN、ERROR和 FATAL,当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。在写程序的时候,为了调试程序,我们会在很多出错的地方输出大量的日志信息。当程序调试完,不需要这些信息时,将程序中这些输出日志信息代码删除吗?这样费时费力,对于大型程序几乎不可行。通过对日志分级,假如不想输出 WARN 级别的日志信息,则 Logger 组件的级别调高即可,省时省心。3、L

6、og4j 的配置文件虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j 支持两 种格式的配置文件:XML 格式和 Java property 格式,本人更喜欢后者,首先看一个简单的例子吧,如下:log4j.rootLogger=debug, stdout, Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to

7、output the callers file name and line number.log4j.appender.stdout.layout.ConversionPattern=%5p %t (%F:%L) - %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=example.loglog4j.appender.R.MaxFileSize= 100KB# Keep one backup filelog4j.appender.R.MaxBackupIndex=1log4j.appen

8、der.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n首先,是设置 root,格式为 log4j.rootLogger=level,appenderName, ,其中 level 就是设置需要输出信息的级别,后面是 appender 的输出的目的地,appenderName 就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 配置日志信息输出目的地 Appender,其语法为log4j.appender.appenderName = fu

9、lly.qualified.name.of.appender.classlog4j.appender.appenderName.option1 = value1.log4j.appender.appenderName.option = valueNLog4j 提供的 appender 有以下几种:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFile

10、Appender(文件大小到达指定尺寸的时候产生新文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)配置日志信息的格式(布局),其语法为:log4j.appender.appenderName.layout = fully.qualified.name.of.layout.classlog4j.appender.appenderName.layout.option1 = value1log4j.appender.appenderName.layout.option = valueNLog4j 提供的 layout 有以下几种:org.

11、apache.log4j.HTMLLayout(以 HTML 表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:%m 输出代码中指定的消息%p 输出优先级,即 DEBUG,INFO ,WARN,ERROR ,FATAL%r 输出自应用启动到输出该 log 信息

12、耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符, Windows 平台为“rn” ,Unix 平台为“n”%d 输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%dyyy MMM dd HH:mm :ss ,SSS,输出类似: 2002 年 10 月 18 日 22:10:28,921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main( TestLog4.java:10)4、Log4j 在程序中的使用要在自己的程序中使用 Log4j,首先需

13、要将 commons-logging.jar 和 logging-log4j-1.2.9.jar 导入到构建路径中。然后再将 log4j.properties 放到 src 根目录下。这样就可以在程序中使用 log4j 了。在类中使用 log4j,首先声明一个静态变量 Logger logger=Logger.getLog(“classname“);现在就可以使用了,用法如下:logger.debug(“debug message“)或者 logger.info(“info message“),看下面一个小例子:import com.foo.Bar;import org.apache.log4

14、j.Logger;import org.apache.log4j.PropertyConfigurator;public class MyApp static Logger logger = Logger.getLogger(MyApp.class.getName();public static void main(String args) / BasicConfigurator replaced with PropertyConfigurator.PropertyConfigurator.configure(args0);logger.info(“Entering application.“

15、);Bar bar = new Bar();bar.doIt();logger.info(“Exiting application.“);Ref : http:/ http:/ 组件Appender 组件决定将日志信息输出到什么地方。支持以下目的地:. 控制台(Console);. 文件(File);. GUI 组件(GUI component);. 套接口服务器(Remote socket server);. NT 的事件记录器(NT Event Logger);. UNIX Syslog 守护进程(Remote UNIX Syslog daemon);一个 Logger 可同时对应多个 A

16、ppender,示例:myLogger 配置二个 Appender: 一个 file, 一个是console:log4j.logger.myAppender=WARN,file,consolelog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=log.txtlog4j.apender.console=org.apache.log4j.ConsoleAppender6、Layout 组件Layout 组件决定日志输出格式,有以下几种类型:. org.apache.log4j.HTMLLa

17、yout(以 HTML 表格形式布局);. org.apache.log4j.PatternLayout(可以灵活地指定布局模式);. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串);. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);为名称为 console 的 Appender 配置 SimpleLayout,代码如下:log4j.appender.console.layout=org.apache.log4j.SimpleLayout输出日志格式如下:WARN - This is a log m

18、essage from the myLogger为名称为 file 的 Appender 配置 PatternLayout,代码如下:log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%t %p - %m%n输出日志格式如下:THREAD-1 WARN - This is a log message from the myLoggerPatternLayout 让开发者依照 ConversionPattern 定义输出格式。Conversio

19、nPattern 中一些指定日志内容和格式的预定义符号说明如下:符号 描述%r 自程序开始后消耗的毫秒数%t 表示日志记录请求生成的线程%p 表示日专语句的优先级%r 与日志请求相关的类别名称%c 日志信息所在的类名%m%n 表示日志信息的内容7、Log4J 的基本用法1. 定义配置文件Log4J 支持二种配置文件格式:XML 和 Java 属性文件(采用“ 键=值”形式)。以下为 Java 属性文件格式配置文件:. 配置 Logger 组件配置 root Logger 语法为:log4j.rootLogger=priority,appenderName,appenderName,.配置自定义

20、 Logger 组件语法为: log4j.logger.loggerName=priority,appenderName,appenderName,.其中:priority 为日志级别,可选值包括 FATAL、ERROR、WARN 、INFO、DEBUG、ALL;appenderName 指定 Appender 组件,可指定多个; . 配置 Appender 组件配置日志信息输出目的地 Appender, 语法为:log4j.appender.appenderName=fully.ualified.name.of.appender.classlog4j.appender.appenderNam

21、e.option1=value1.log4j.appender.appenderName.optionN=valueNLog4J 提供的 Appender 有以下几种:a. org.apache.log4j.ConsoleAppender(控制台);b. org.apache.log4j.FileAppender(文件);c. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件 );d. org.apache.log4j.RollingFileAppender(文件大小到指定尺寸产生一个新的文件);e. org.apache.log4j.W

22、riteAppender(将日志信息以流格式发送到任意指定地方 );. 配置 Layout 组件配置 Layout 组件语法为:log4j.appender.appenderName.layout=fully.ualified.name.of.appender.classlog4j.appender.appenderName.layout.option1=value1.log4j.appender.appenderName.layout.optionN=valueN下面为一配置文件示例,文件名为 log4j.properties:# LOGGERS #configure root logger

23、log4j.rootLogger=INFO,console#define a logger named myLoggerlog4j.logger.myLogger=WARN#define a second logger that is a child to myLoggerlog4j.logger.myLogger.mySonLogger=,file# APPENDERS #define an appender named console, which is set to be a ConsoleAppenderlog4j.appender.console=org.apache.log4j.C

24、onsoleAppender# define an appender named file, which is set to be a RollingFileAppenderlog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=log.txt# LAYOUTS # assian a SimpleLayout to console appenderlog4j.appender.console.layout=org.apache.log4j.SimpleLayout# assian a PatternLa

25、yout to file appenderlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%t%p-%m%n2. 程序中使用 Log4j. 获得日志记录器:获得 rootLogger:Logger rootLogger=Logger.getRootLogger();获得自定义 Logger:Logger myLogger = Logger.getLogger(“log4j.logger.myLogger“);. 读取日志记录器,配置 Log

26、4J 环境;a. BasicConfigurator.configure(): 自动快速地使用默认 Log4J 环境;b. Property.configurator.configure(String configFilename): 读取使用 Java 属性格式的配置文件并配置 Log4J 环境;c. DOMConfigurator.configure(String filename): 读取 XML 形式的配置文件并配置 LOG4J 环境;. 输出日志信息;在程序代码中需要生成日志的地方,调用 Logger 的各种输出日志方法输出不同级别的日志,例如:myLogger.debug(“Thi

27、e is a log message from the “ + myLogger.getName();下面为一使用 Log4J 的程序,程序名为 Test.java:java 代码1. import org.apache.log4j.Logger; 2. import org.apache.log4j.PropertyConfigurator; 3. 4. public class Test 5. 6. public static void main(String args) 7. /Get an instance of the myLogger 8. Logger myLogger = Lo

28、gger.getLogger(“myLogger“); 9. 10. /Get an instance of the childLogger 11. Logger mySonLogger = Logger.getLogger(“myLogger.mySonLogger“); 12. /Load the proerties using the PropertyConfigurator 13. PropertyConfigurator.configure(“log4j.properties“); 14. 15. /Log Messages using the Parent Logger 16. m

29、yLogger.debug(“Thie is a log message from the “ + myLogger.getName(); 17. myLogger.info(“Thie is a log message from the “ + myLogger.getName(); 18. myLogger.warn(“Thie is a log message from the “ + myLogger.getName(); 19. myLogger.error(“Thie is a log message from the “ + myLogger.getName(); 20. myL

30、ogger.fatal(“Thie is a log message from the “ + myLogger.getName(); 21. 22. mySonLogger.debug(“Thie is a log message from the “ + mySonLogger.getName(); 23. mySonLogger.info(“Thie is a log message from the “ + mySonLogger.getName(); 24. mySonLogger.warn(“Thie is a log message from the “ + mySonLogge

31、r.getName(); 25. mySonLogger.error(“Thie is a log message from the “ + mySonLogger.getName(); 26. mySonLogger.fatal(“Thie is a log message from the “ + mySonLogger.getName(); 27. 28. 程序运行结果为:WARN - Thie is a log message from the myLoggerERROR - Thie is a log message from the myLoggerFATAL - Thie is

32、a log message from the myLoggerWARN - Thie is a log message from the myLogger.mySonLoggerERROR - Thie is a log message from the myLogger.mySonLoggerFATAL - Thie is a log message from the myLogger.mySonLogger另在 Test.class 所在的目录下看到一个 log.txt 文件,内容如下:WARN - Thie is a log message from the myLogger.mySon

33、LoggerERROR - Thie is a log message from the myLogger.mySonLoggerFATAL - Thie is a log message from the myLogger.mySonLogger如将配置文件 log4j.properties 中语句log4j.logger.myLogger.mySonLogger=,file改为log4j.logger.myLogger.mySonLogger=,file,console再次运行程序,结果如下:WARN - Thie is a log message from the myLoggerERR

34、OR - Thie is a log message from the myLoggerFATAL - Thie is a log message from the myLoggerWARN - Thie is a log message from the myLogger.mySonLoggerWARN - Thie is a log message from the myLogger.mySonLoggerERROR - Thie is a log message from the myLogger.mySonLoggerERROR - Thie is a log message from

35、 the myLogger.mySonLoggerFATAL - Thie is a log message from the myLogger.mySonLogger FATAL - Thie is a log message from the myLogger.mySonLoggermySonLogger 的日志在控制台上输出了二次,这是因为 mySonLogger 继承了父类 console Appender,本身又定义了一个 console Appender, 因而有二个 console Appender。六、在 web 应用中使用 Log4J创建一个 Servlet,在它初始化方法中

36、读取 Log4J 配置文件并配置 Log4J 环境,这个 Servlet 在 Web应用启动时候被加载和初始化,然后就可在其它 Web 组件中获取 Logger 对象并输出日志。1. 创建用于配置 Log4J 环境的 Servletjava 代码1. import javax.servlet.*; 2. import javax.servlet.http.*; 3. import java.io.*; 4. import java.util.*; 5. 6. import org.apache.log4j.PropertyConfigurator; 7. 8. public class Log

37、4JServlet extends HttpServlet 9. public void init() throws ServletException 10. String path = getServletContext().getRealPath(“/“); 11. /getInitParameter(“propfile“)方法从 web.xml 文件中读取 Log4J 配置文件的名字“profile“。 12. String propfile = path + getInitParameter(“propfile“); 13. PropertyConfigurator.configure

38、(propfile); 14. 15. 16. 该 Servlet 在 web.xml 中的配置如下:xml 代码1. 2. log4jServlet 3. Log4JServlet 4. 5. propfile 6. /WEB-INF/log4j.properties 7. 8. 1 9. 2. 在 login.jsp 中输出日志loginusername: password: 3. 发布运行使用 Log4J 的 web 应用1) 将 Log4J 的 JAR 文件拷贝至目录:/WEB-INF/lib2) 创建 Log4J 的配置文件 log4j.properties, 存放目录为:/WEB-

39、INF。内容同前面配置文件示例。3) 编译 Log4JServlet, 存放至目录: /WEB-INF/classes4) 修改 web.xml 文件,加入以下内容:xml 代码1. 2. log4jServlet 3. Log4JServlet 4. 5. profile 6. /WEB-INF/log4j.properties 7. 8. 1 9. 5) 启动服务器,访问 login.jsp 页面,在服务器控制台上看到如下日志:WARN - Thie is a log message from the myLoggerERROR - Thie is a log message from t

40、he myLoggerFATAL - Thie is a log message from the myLoggerWARN - Thie is a log message from the myLogger.mySonLoggerERROR - Thie is a log message from the myLogger.mySonLoggerFATAL - Thie is a log message from the myLogger.mySonLogger另在/WEB-INF 目录下看到一个 log.txt 文件,内容如下:WARN - Thie is a log message from the myLogger.mySonLoggerERROR - Thie is a log message from the myLogger.mySonLoggerFATAL - Thie is a log message from the myLogger.mySonLogger

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报