Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
一、定义配置文件
其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:
1.配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
2.配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
3.配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下几种:
org.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信息耗费的毫秒数 |
%c |
输出所属的类目,通常就是所在类的全名 |
%t |
输出产生该日志事件的线程名 |
%n |
输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” |
%d |
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 |
%l |
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) |
二、在代码中使用Log4j
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
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 ) ;
三、参考资料
Log4j项目主页-----------------http://www.log4j.org
slf4j简介
SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
1.slf4j+log4j
使用log4j做为底层日志工具,需要三个架包:
log4j-1.2.xx.jar
slf4j-api-x.x.x.jar
slf4j-log4j12-x.x.x.jar
下载地址:
http://logging.apache.org/log4j/1.2/download.html
http://www.slf4j.org/download.html
在工程的src根目录下创建log4j.properties文件(名字是固定的,这是初始化类文件中固定的名称和路径,转载过程自动完成,不需要手动控制)
这个是一个资源配置文件,指定固定的key和value进行配置。基本格式如下:
#1.配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
其中这里也可以用rootCategory进行配置,因为Logger是Category的一个子类。
#2.配置日志信息输出目的地Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
其中这里可以用该类的大写首字母来简写使用。
以下是一个完整的log4j.properties
log4j.rootCategory=error, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p : %c(%L) -> %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=/home/httpd/html/gameStatistics/log/stats.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %p : %c(%L) -> %m%n
log4j.logger.org.apache.commons=error
log4j.logger.com.danga.MemCached.MemCachedClient=ERROR
其中R,代表RollingFileAppender,指定文件大小到达指定尺寸的时候产生一个新的日志文件,R.File配置了文件路径和名称,R.layout使日志以指定布局模式输出,
R.layout.ConversionPattern采用类似C语言中的printf函数的打印格式格式化日志信息;
log4j.logger.com.danga.MemCached.MemCachedClient=ERROR,指单独设置memcached日志级别
2.slf4j+logback(另一个日志机制)
Logback和log4j是非常相似的,Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小。
搭建logback需要3个架包:
logback-classic-0.9.21.jar(目前已经有1.0.0)
logback-core-0.9.21.jar(目前已经有1.0.0)
slf4j-api-1.6.x.jar
下载地址:
http://logback.qos.ch/download.html
http://www.slf4j.org/download.html
在工程的src根目录下创建logback.xml文件(名字是固定的,转载过程自动完成,不需要手动控制)
这里logback有一个专门用来读取logback.xml的机制,logback框架初始化时,会调用类文件来读取logback.xml文件,若是没有找到,则调用默认设备文件,按照默认设备文件进行设备。
以下是一个完整的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义时间戳-->
<timestamp key="byDay" datePattern="yyyy-MM-dd"/>
<!--定义指定文件名称的输出-->
<appender name="RootFileAppender" class="ch.qos.logback.core.FileAppender">
<!--此处设定的文件名称是动态设置的 即每天生成一个文件用于记录当天的文件信息-->
<file>/home/httpd/html/gameStatistics/log/stats-${byDay}.log</file>
<append>true</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %F, %L, %C{1}, %M %m%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<!--过滤器指定该类的日志级别-->
</appender>
<!--定义控制台输出-->
<appender name="RootConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %F, %L, %C{1}, %M %m%n</pattern>
</layout>
</appender>
<!-- 设置根 的日志级别,根元素是配置文件的入口-->
<root>
<level value="error"/>
<appender-ref ref="RootFileAppender"/> <!-- 配置对RootFileAppender的引用-->
<appender-ref ref="RootConsoleAppender"/> <!-- 配置对RootConsoleAppender的引用-->
</root>
</configuration>
其中设置指定的某个类的日志等级
<logger name="com.danga.MemCached.MemCachedClient">
<level value="error" />
</logger>
除了指定周期分日志文件,logback还可以指定大小分日志文件,这里引用是RollingFileAppender
<appender name="RootFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/httpd/html/gameStatistics/log/stats.log</file>
<append>true</append>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/home/httpd/html/gameStatistics/log/stats.log.%i</fileNamePattern>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10000000</maxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss}, %p, %c, %t, %F, %L, %C{1}, %M %m%n</pattern>
</layout>
</appender>
附:日志级别
DEBUG < INFO < WARN < ERROR < FATAL < ALL < OFF
static Level DEBUG
DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
static Level INFO
INFO level表明消息在粗粒度级别上突出强调应用程序的运行过程。
static Level WARN
WARN level表明会出现潜在错误的情形。
static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。
static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。
static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。
相关推荐
本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...
SLF4J 1.6.2版本为应用开发者提供了灵活性,让他们能够在运行时选择日志实现,例如log4j、java.util.logging或者Logback。SLF4J的API设计简洁,允许在不修改代码的情况下更换底层的日志实现,降低了维护成本。 将...
LogBack 是一个日志框架,它是 Log4j 的后继者,由 Log4j 的创始人 Ceki Gülcü 与 Sébastien Pennec 共同创建。本文将探讨十个理由,解释为什么你应该从 log4j 迁移到 LogBack。 1. **性能提升**:LogBack 在...
`SLF4J`的设计目标是提供一个简单、统一的接口,允许用户在运行时插入所需的日志框架,如`log4j`、`Logback`等。`1.6.1`同样是版本号,表示该API的稳定版本。`SLF4J`通过接口而不是具体的实现来工作,这使得在项目中...
SLF4J、slf4j-log4j12和Log4j三者组合,为Java项目提供了灵活且可扩展的日志解决方案。SLF4J作为接口层,允许代码独立于具体日志框架,slf4j-log4j12作为桥接器将SLF4J调用转换为Log4j操作,而Log4j则负责实际的日志...
Logback分为三个组件:logback-classic(实现了SLF4J接口,兼容log4j API)、logback-core(提供基础架构)和logback-access(用于Servlet环境)。Logback的配置同样通过XML文件完成,其配置灵活性更高,例如支持...
在实际项目中,这三者通常是这样配合工作的:开发者使用SLF4J的API(`slf4j-api-1.6.1.jar`)编写日志语句,然后在运行时通过`slf4j-log4j12-1.6.6.jar` 将这些调用转交给Log4j(`log4j-1.2.12.jar`)来处理具体的...
- **log4j-over-slf4j.jar**:用于替换Log4J,需要注意的是,原有的`log4j.properties`配置文件将不再有效,需要转换为`logback.xml`。 - **jul-to-slf4j.jar**:用于替换JDK自带的日志系统,需要在程序启动时调用`...
在实际应用中,这三者结合使用,开发者可以在代码中通过SLF4J的API进行日志记录,然后通过`slf4j-log4j12`的绑定模块,将这些日志请求路由到Log4j,由Log4j负责实际的日志输出工作。这样做的好处是解耦了日志实现与...
【SLF4J(Simple Logging Facade for Java)】是一个日志门面,为各种日志框架如log4j、Logback提供一个统一的接口。SLF4J允许开发者在部署时选择合适的日志实现,只需更换绑定的日志实现库即可。这使得项目具有更好...
- **组件**:Logback由三个主要组件构成:ch.qos.logback.classic(提供SLF4J的实现)、ch.qos.logback.core(提供底层日志服务)和logback-access(支持Servlet容器的日志访问)。 - **配置**:Logback的配置文件...
SLF4J(Simple Logging Facade for Java)是一个用于多种日志框架的简化接口或抽象层,旨在将日志的创建者与具体的日志实现进行解耦。通过这种方式,开发人员可以在开发阶段使用自己熟悉的日志实现,在生产或测试...
- **与 SLF4J 的关系**:SLF4J(Simple Logging Facade for Java)是一种抽象日志框架接口,Log4j 可以作为 SLF4J 的具体实现。通过这种方式,开发者可以在不影响应用逻辑的情况下轻松切换不同的日志框架。 #### 七...
Log4j还可以与其他组件结合,如SLF4J(Simple Logging Facade for Java),提供更灵活的日志抽象层,或者通过Logback作为后端实现,提高日志处理性能。 总之,Log4j是Java开发者必备的工具之一,通过深入学习和实践...
最后,log4j与Java Logging API(JUL)、SLF4J和Logback等其他日志框架的关系和互操作性也是手册中的重要内容。开发者需要了解如何在不同的框架之间切换,以及如何在已有的代码库中平滑地引入log4j。 总而言之,...
在实际开发中,可以根据项目规模和需求选择是否仿造Log4j,也可以直接使用成熟的日志库,如Logback(Log4j的后继者)或SLF4J(Simple Logging Facade for Java),它们通常提供了更多高级特性并经过了广泛的社区测试...
SLF4J(Simple Logging Facade for Java)是一个用于各种日志框架的抽象层,如 Logback、Log4j 等,它提供了一种在部署时插入所需日志实现的方式。SLF4J 提供了一套简单的 API,使得开发者能够在不修改代码的情况下...
Log4j与SLF4J(Simple Logging Facade for Java)、Java Util Logging、Logback等日志框架有各自的优缺点,选择时应考虑项目需求、兼容性、性能等因素。 总之,《Log4j The Complete Manual》是学习和使用Log4j的...
8. **与SLF4J和Logback的关系** SLF4J(Simple Logging Facade for Java)是一个日志API,允许用户在部署时插入任意日志实现,包括Log4j。Logback是SLF4J的推荐实现,它比Log4j更快且功能更强大。 这个"Log4J.rar...
Logback 提供了三个核心组件:logback-core、logback-classic 和 logback-access,分别用于基础功能、SLF4J(简单日志门面)接口实现和Servlet容器的日志访问。 ### 日志文件配置 Logback 的配置主要通过 `logback...