以前的项目中为了能够检查程序的运行状态,需要将程序运行时的一些信息记录到日志文件中。
Log4j是一个较全面的日志软件包,能够满足各种形式的日志记录需要,并且使用起来比较方便,结构非常清晰,经过这段时间的使用,对其进行了较详细的学习,在实际项目的使用中,深刻感受到了它的方便和功能的全面。
Log4j的基本使用方法在其官方网站上有较详细的介绍,下面这篇文章对于基本应用已经满足:
Short introduction to log4j:http://logging.apache.org/log4j/docs/manual.html
下面根据我自己的使用,对其使用方法进行总结。
Log4j最初只是为了对java程序进行日志记录的软件包,而现在已经有多种语言的版本,如C, C++, C#, Perl, Python, Ruby, 和 Eiffel。
Log4j中有三个最重要的概念:Logger,Appender 和 Layout,下面对它们分别叙述:
一、Logger
Logger可以理解为一个日志记录器,在程序中由它完成日志记录的工作。在Log4j中有对应的Logger类,其提供设置日志输出级别,日志输出地址的方法,并可将信息按照指定级别(Level)进行输出
Logger中可以设置的级别有七级,由低到高分别为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF ,其中,ALL 代表输出所有级别的日志信息,OFF 代表关闭所有日志信息的输出,也就是说,Logger在程序中可以输出的日志信息有五种级别,可分别用在不同情况的日志输出。如:DEBUG 级别的信息通常为一些调试时程序开发者需要查看的程序运行状态,ERROR 级别的信息则主要用于记录程序运行的错误。
由于日志信息被分为了不同级别,而Log4j又提供了对不同级别日志的输出开关,因此可以在不修改程序源代码的情况下定制日志的输出内容。
在log4j的配置文件中可用方式配置日志的输出级别:
log4j.rootLogger=OFF #关闭根Logger的日志输出
log4j.logger.mylogger=DEBUG #将mylogger的日志输出级别设定为DEBUG
所有在配置文件中配置的信息都可以在程序中动态配置
Logger有层次关系,其日志输出级别也会继承父级的输出级别,因此,当某一Logger没有指定输出级别时,将默认使用其父级Logger的输出级别。
Logger的输出地址,由Appender指定,一个Logger可指定多个Appender,也就是说,相同的信息可同时输出到不同的地方,程序开发者可在调试时,让日志信息在输入日志文件的同时,向控制台也输出,以方便查看程序运行状态。
与日志级别一样,Appender也会根据Logger的层次关系继承父级Logger的所有Appender
对于Logger的层次关系, Short introduction to log4j:
二、Appender
以上已经提到,Appender用来配置日志信息的输出地址,包括控制台,文件等:
以上不同用途和不同输出地址都有对应的Appender,下面列举几个常用的Appender:
- ConsoleAppender :将日志信息输出到控制台
- FileAppender: 将日志信息输出到普通文本文件
-
DailyRollingFileAppender: 将日志信息输出到普通文本文件,并每天自动产生新日志文件,在前一天的日志文件名后追加日期,追加的信息格式可由用户自己定义
- RollingFileAppender:文件大小到达指定尺寸时,产生一个新的文件
- WriterAppender:将日志信息以流格式发送到任意指定的地方
对于将日志输出到文件的Appender,还要考虑一个文件字符集编码的问题。默认情况下,Log4j将日志信息按照本地系统编码输出到文件,为了使其按照指定编码生成日志文件,则需要指定编码方式。
在我自己的使用过程中,编码的问题困扰了我很久,因为在我使用DailyRollingFileAppender的setEncoding()方法时,发现输出的日志文件并没有按照我指定的编码保存,后来才发现,在程序中设定完Appender的属性后,一定要调用Appender的activateOptions()方法,才能使设置生效。
下面是我出问题的代码:
DailyRollingFileAppender fileAppender = new DailyRollingFileAppender (Layout, filepath, datepattern);
fileAppender.setName("fileAppender");
fileAppender.setEncoding("utf-8");
按照以上方式设定日志文件的编码将失效,日志文件并不会按照设定的编码方式保存。
下面是修改后的编码:
DailyRollingFileAppender fileAppender = new DailyRollingFileAppender (Layout, filepath, datepattern);
fileAppender.setName("fileAppender");
fileAppender.setEncoding("utf-8");
fileAppender.activateOptions();
三、Layout
Log4j中提供了对日志信息输出格式进行定制的类,称为Layout类,其可作为Appender的属性添加到Appender中。常用的Layout类有:
- org.apache.log4j.HTMLLayout :以HTML表格形式布局
- org.apache.log4j.PatternLayout :可以灵活地指定布局模式
- org.apache.log4j.SimpleLayout :包含日志信息的级别和信息字符串
- org.apache.log4j.TTCCLayout :包含日志产生的时间、线程、类别等等信息
其中最灵活的Layout类为PatternLayout,用户可对其日志信息输出格式进行完全自由的定制,通过在pattern字符串中的特殊字符来控制。
在Log4j的官方网站中,对pattenr字符串中特殊字符的意义和用法有详细的介绍和举例:http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html
相关推荐
该文档包括log4j的介绍、log4j的配置文件以及配置参数详解、log4j在程序中的使用、以及log4j配置示例四大部分。
Log4j使用总结.docLog4j使用总结.doc Log4j使用总结.docLog4j使用总结.doc Log4j使用总结.docLog4j使用总结.doc
包含几个log4j包的几个版本,大家可以各取所需
log4j配置详解,本人亲自测试总结,新人必备啊
非常详细的log4j的描述,配置,和各种配置选项.
项目结构log4j (log4j 常见配置文件配置)log4j2 (log4j2 常见配置文件配置)demos (常见demos,详情如下)log4j & demosDemo1 log4j 基础Demo2 log4j-servletDemo3 log4j-springlog4j2 & demosDemo1 log4j2 基础Demo2 ...
Log4j经典总结,对于Java日志的管理经典介绍
这个文档是本人自己打开log4j源码自己总结的,希望对大家有用。
log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记log4j学习笔记
对log4j的一个总结,写的很不错,很全,包括把日志写入到控制台,文件,数据库,Socket等等
本人在项目中总结的一点小经验 关于log4j动态配置的一些方法和心得
本文内容是自己参考 V512免费视频的讲解总结出来的,详细介绍了Log4j的用法。Log4j核心是 Logger,Appender,Layout里面都有详细介绍。
log4j配置详解,总结资料,log4j配置详解,总结资料
通过自己学习和在工作中的总结以及在网上查找相关资料,总结了这个文档,希望对大家有帮助
好文共欣赏: ...log4j.xml log4j.xml配置文件设置.doc Log4J快速入门.htm pwosboy -JavaEye技术社区.htm 将系统日志发布到多个文件.htm 请问怎么控制日志的输出啊.htm 怎样关闭Hibernate启动时的DEBUG信息.htm
log4j.properties配置详解,长期总结,以完善
日志开发框架 总结归纳 log4j log4j2
Log4j 组件 使用 Logback 由Log4j之父做的另一个开源项目,业界中称作logj后浪,一个可靠、同样且灵活的java日志框架。 Logback组件 Logback配置 Logback输出格式 使用 Log4j2 特征 使用 日志门面技术 JCL 使用 SLF4...
很好的日志应该掌握的知识点罗列,希望对您有用
本人将Eclipse 环境下log4j需要的jar包及配置文件以及简单的使用步骤总结了一下,希望对大家有帮助