一,Log4j简介
?????? 日志的三个目的: ?????????????
????????????????????? 1. 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作
????????????????????? 2.跟踪代码运行时轨迹,作为日后审计的依据
????????????????????? 3.担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息
????????? 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。
Apache为我们提供了一个强有力的日志操作包Log4j。通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件、甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
?
二,Log4j的简单使用事例
?????? 1.导入log4j.jar到项目中
?????? 2.在项目 类路径下(src文件夹下)创建log4j.properties文件内容如下(后面解释配置的意思):
?????
class="java">log4j.rootLogger=debug,appender1 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
?
?
???? 3.测试代码
?
package log4j; import org.apache.log4j.Logger; public class Log4jTest { private static Logger logger=Logger.getLogger(Log4jTest.class); public static void main(String[] args) { logger.debug("This is debug message."); logger.debug("This is info message."); logger.debug("This is error message."); } }
?
?
?? 输出:
?
[main] DEBUG log4j.Log4jTest - This is debug message. [main] DEBUG log4j.Log4jTest - This is info message. [main] DEBUG log4j.Log4jTest - This is error message.
?
?
?三,Log4j的构成
???? 通过配置文件可以知道,主要有三个方面的内容:
log4j的类图:
Logger -? 日志写出器,供程序员输出日志信息 (这是程序中重要用的类)
Appender -? 日志目的地,把格式化好的日志信息输出到指定的地方去 (看看配置文件log4j.properties就应该好理解了)
ConsoleAppender -? 目的地为控制台的 Appender
FileAppender -? 目的地为文件的 Appender
RollingFileAppender -? 目的地为大小受限的文件的 Appender
Layout -? 日志格式化器,用来把程序员的 logging request 格式化成字符串
PatternLayout -? 用指定的 pattern 格式化 logging request 的 Layout
?
四,log4j的使用详解
???? 1. .properties配置文件详解(Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是properties(key=value)文件。下面我们介绍使用 properties 文件做为配置文件的方法)
???????? (1)配置根 Logger,其语法为:
???????????????? log4j.rootLogger = level,appenderName1,appenderName2,? ?
??????????????? level? 是日志记录的优先级,Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了 INFO 级别,则应用程序中所有DEBUG 级别的日志信息将不被打印出来。
????????? (2)配置日志信息输出目的地 Appender,其语法为:
??????????????
log4j.appender.appenderNAME=org.apache.log4j.ConsoleAppender log4j.appender.appenderNAME.属性名(比如layout属性)=属性值 log4j.appender.appenderNAME.属性名=属性值
?
?????????????? Log4j.提供的appender有以下几种:
?
??? 配置的具体参数:
?????? 1)? ConsoleAppender 选项
???????? Threshold=WARN:指定日志消息的输出最低层次。
?(3)配置日志信息的格式(布局),其语法为:
??? log4j.appender.appenderName.layout=Log4j提供的layout类
??? Log4j提供的layout有以下几种:
????????? org.apache.log4j.HTMLLayout(以 HTML 表格形式布局)
????????? org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
????????? org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
????????? org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
???? 1)? HTMLLayout 选项
???????????? LocationInfo=true:默认值是 false,输出 java 文件名称和行号
???????????? Title=my app file:? 默认值是? Log4J Log Messages.
???? 2)? PatternLayout 选项
???????????? ConversionPattern=%m%n :指定怎样格式化指定的消息。
???? 3)? XMLLayout 选项
???????????? LocationInfo=true:默认值是 false,输出 java 文件和行号
???????????? Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下:
????????? ??
og4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
?
?
??? 这里需要说明的就是日志信息格式中几个符号所代表的含义:
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如
?
1)%20c:指定输出 category 的名称,最小的宽度是 20,如果 category 的名称小于 20 的话,默认的情况下右对齐。
2)%-20c:指定输出 category 的名称,最小的宽度是 20,如果 category 的名称小于 20 的话,"-"号指定左对齐。
3)%.30c:指定输出 category 的名称,最大的宽度是 30,如果 category 的名称大于 30 的话,就会将左边多出的字符截掉,但小于 30 的话也不会有空格。
4)%20.30c:如果 category 的名称小于 20 就补空格,并且右对齐,如果其名称长于 30 字符,就从左边交远销出的字符截掉
?
?2.代码中使用Log4j
? ? ? ? ? (1) 得到记录器
???????
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
?
????????? (2)读取配置文件
?????????????? 当获得了日志记录器之后,第二步将配置 Log4j 环境,其语法为:
??????????????
BasicConfigurator.configure (): 自动快速地使用缺省 Log4j 环境。 PropertyConfigurator.configure ( String configFilename) :读取使用 Java 的特性文件编写的配置文件。 DOMConfigurator.configure ( String filename ) :读取 XML 形式的配置文件。
?
?
?????????? (3)插入记录信息(格式化日志信息)
????????????? 当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ; Logger.info ( Object message ) ; Logger.warn ( Object message ) ; Logger.error ( Object message ) ;
?
?
???????????????
?五,Properties文件实例说明
?
log4j.rootCategory=INFO, stdout , R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n log4j.logger.com.neusoft=DEBUG //指定 com.neusoft 包下的所有类的等级为 DEBUG,可以把 com.neusoft 改为自己项目所用的包名。 log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=ERROR log4j.logger.org.apache.commons=ERROR
?
?
?
?
?