http://commons.apache.org/proper/commons-logging/java
http://logging.apache.org/log4j/2.x/web
The Common Log Format, also known as the NCSA Common log format,is a standardized text file format used by web servers when generating server log files. Because the format is standardized, the files can be readily analyzed by a variety of web analysis programs, for example Webalizer and Analog.spring
Each line in a file stored in the Common Log Format has the following syntax:apache
host ident authuser date request status bytesapi
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326服务器
log4j简介app
Log4j是Apache的一个开放源代码项目,经过使用Log4j,咱们能够控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;咱们也能够控制每一条日志的输出格式;经过定义每一条日志信息的级别,咱们可以更加细致地控制日志的生成过程。最使人感兴趣的就是,这些能够经过一个配置文件来灵活地进行配置,而不须要修改应用的代码。框架
log4j--log for java(java的日志)
在强调可重用组件开发的今天,除了本身从头至尾开发一个可重用的日志操做类外,Apache为咱们提供了一个强有力的日志操做包-Log4j。
此外,经过Log4j其余语言接口,您能够在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中同样,使得多语言分布式系统获得一个统一一致的日志组件模块。并且,经过使用各类第三方扩展,您能够很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。分布式
使用的license: Apache License V2.0ide
配置log4j四步
第一步 加入log4j-1.2.8.jar(能够选择log4j的更高版本)到lib下。
第二步 在CLASSPATH下创建log4j.properties。 参照14的/usr/local/cache-bin下的文件
第三步 修改此文件相关属性
第四步
[root@225-oth cache-bin]# cat j3 log4j.rootLogger error,R,stdout log4j.appender.stdout org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern %d{yyyy-MM-dd HH:mm:ss,SSS} %p - %t - %c - %m%n log4j.appender.R org.apache.log4j.DailyRollingFileAppender log4j.appender.R.datePattern '.'yyyy-MM log4j.appender.R.File ${CACHE_SERVER}/logs/cacheserver.log log4j.appender.R.layout org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern %d{yyyy-MM-dd HH:mm:ss,SSS} %p - %t - %c - %m%n
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
此句为定义名为stdout的输出端的layout是哪一种类型,能够是
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(能够灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
若是使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数以下:
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,一般就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式,好比:%d{yyyy-MM-dd HH:mm:ss,SSS},输出相似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;
定义配置文件
应用
slf4j与log4j是什麽关系?
都是用于作日志(log)的两套接口,slf4j.jar和log4j, 他们都符合common log的标准而制定的。能够说是竞争关系,相对而言,log4j用的相对比较多。 Hibernate里记录日志用的是slf4j,不过能够更改api替换为log4j,这么作的人也不少。
slf是hibernate提供的一个日志接口,它能够被log4j的方法去实现,也能够被common-logging的方法去实现,等等!只是一个接口与方法实现的关系!
java日志组件介绍(common-logging,log4j,slf4j,logback )
咱们在作项目时,日志的记录是必不可少的一项任务,而咱们一般是使用 apache 的 log4j 日志管理工具。然而,在项目中,咱们常常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为何咱们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不能够,这二者之间究竟是怎么的一种关系呢?
做为记录日志的工具,它至少应该包含以下几个组成部分(组件):
1. Logger
记录器组件负责产生日志,并可以对日志信息进行分类筛选,控制什么样的日志应该被输出,什么样的日志应该被忽略。它还有一个重要的属性 - 日志级别。无论何种日志记录工具,大概包含了以下几种日志级别:DEBUG, INFO, WARN, ERROR 和 FATAL。
2. Level
日志级别组件。
3. Appender
日志记录工具基本上经过 Appender 组件来输出到目的地的,一个 Appender 实例就表示了一个输出的目的地。
4. Layout
Layout 组件负责格式化输出的日志信息,一个 Appender 只能有一个 Layout。
咱们再来看看 log4j.jar,打开 jar 包,咱们能够看到 Logger.class(Logger),Level.class(Level), FileAppender.class(Appender), HTMLLayout.class(Layout)。其它的咱们先忽略不看,这几个字节码文件正好是记录日志必不可少的几个组件。
接下来看看 commons-logging 中的 org.apache.commons.logging.Log.java 源码:
好了,分析到这里,咱们应该知道,真正的记录日志的工具是 log4j 和 sun 公司提供的日志工具。而 commons-logging 把这两个(实际上,在 org.apache.commons.logging.impl 包下,commons-logging 仅仅为咱们封装了 log4j 和 sun logger)记录日志的工具从新封装了一遍(Log4JLogger.java 和 Jdk14Logger.java),能够认为 org.apache.commons.logging.Log 是个傀儡,它只是提供了对外的统一接口。所以咱们只要能拿到 org.apache.commons.logging.Log,而不用关注到底使用的是 log4j 仍是 sun logger。
既然如此,咱们向构建路径加了 commons-logging.jar 和 log4j.jar 两个 jar 包,那咱们的应用程序到底使用的 log4j 仍是 sun logger 呢?
但是问题又来了,org.apache.commons.logging.Log 和 org.apache.log4j.Logger 这两个类,经过包名咱们能够发现它们都是 apache 的项目,既然以下,为什么要动如此大的动做搞两个东西(指的是 commons-logging 和 log4j)出来呢?事实上,在 sun 开发 logger 前,apache 项目已经开发了功能强大的 log4j 日志工具,并向 sun 推荐将其归入到 jdk 的一部分,但是 sun 拒绝了 apache 的提议,sun 后来本身开发了一套记录日志的工具。但是如今的开源项目都使用的是 log4j,log4j 已经成了事实上的标准,但因为又有一部分开发者在使用 sun logger,所以 apache 才推出 commons-logging,使得咱们没必要关注咱们正在使用何种日志工具。
slf4j全 称为Simple Logging Facade for JAVA,java简单日志门面。相似于Apache Common-Logging,是对不一样日志框架提供的一个门面封装,能够在部署的时候不修改任何配置便可接入一种日志实现方案。可是,他在编译时静态绑 定真正的Log库。使用SLF4J时,若是你须要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各类桥接包)。
common-logging是apache提供的一个通用的日志接口。用户能够自由选择第三方的日志组件做为具体实现,像log4j,或者jdk自带的logging, common-logging会经过动态查找的机制,在程序运行时自动找出真正使用的日志库。固然,common-logging内部有一个Simple logger的简单实现,可是功能很弱。因此使用common-logging,一般都是配合着log4j来使用。使用它的好处就是,代码依赖是common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,能够更改日志实现的第三方库。