您的位置:首页 > 编程语言 > Java开发

java日志--Log4j

2016-04-05 13:46 489 查看
Log4j

========================================================================================================

Log4j由三个重要的组件构成:1.日志信息的优先级 2.日志信息的输出目的地 3.日志信息的输出格式

日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度

日志信息的输出指定了日志将打印到控制台、文件、数据库、邮件等目的地

而输出格式则控制了日志信息的显示内容格式

log4j.properties配置文件

********************************************************
### 设置根Logger###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log1.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 设置第二个输出端,输出到文件,该文件最大空间为1000KB,超过1000KB后自动备份,生成新文件
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.file=E://logs/log2.log  ## ${catalina.home}/logs/log2.log
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.conversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.E.MaxFileSize = 1000KB   ## 文件的最大size
log4j.appender.E.MaxBackupIndex = 10    ## 最大记录文件数
========================================================================================================
1.配置根Logger,其语法为:

-- log4j.rootLogger = [ level ] , appenderName, appenderName, …

level 是日志记录的优先级

appenderName就是指日志信息输出到哪个地方
2.配置日志信息输出目的地Appender,其语法为:

-- log4j.appender.appenderName.option1 = value1

Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),  

org.apache.log4j.FileAppender(文件),  

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Threshold=WARN:指定日志消息的输出最低层次。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:

1)'.'yyyy-MM: 每月

2)'.'yyyy-ww: 每周

3)'.'yyyy-MM-dd: 每天

4)'.'yyyy-MM-dd-a: 每天两次

5)'.'yyyy-MM-dd-HH: 每小时

6)'.'yyyy-MM-dd-HH-mm: 每分钟
3.配置日志信息的格式(布局),其语法为:

-- log4j.appender.appenderName.layout.option1 = value1

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平台为“rn”,Unix平台为“n”  

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.

==========================================================

maven引入jar包

<dependency>

    <groupId>log4j</groupId>

    <artifactId>log4j</artifactId>

    <version>1.2.17</version>

</dependency>

Spring中使用Log4j

web.xml增加
<!-- 设置根目录 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<!-- 3000表示 开一条watchdog线程每60秒扫描一下配置文件的变化 -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>3000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4jRefreshInterval:动态改变记录级别及实现

java类中使用:

private static final Logger LOG = LoggerFactory.getLogger(类名.class);

注:推荐使用commons-logging结合log4j进行日志记录

private static Log logger = LogFactory.getLog(类名.class);

**********************************************************************************************************
java日志组件介绍(common-logging,log4j,slf4j,logback)

参考:http://blog.csdn.net/yycdaizi/article/details/8276265

1.common-logging

common-logging是apache提供的一个通用的日志接口,

用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging。

common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。

当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。

所以使用common-logging,通常都是配合着log4j来使用。使用它的好处就是,代码依赖是common-logging而非log4j,

避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。

使用common-logging的常见代码:

import org.apache.commons.logging.Log;  

import org.apache.commons.logging.LogFactory;  

public class A {  

    private static Log logger = LogFactory.getLog(this.getClass());  

}
动态查找原理:

Log 是一个接口声明。LogFactory 的内部会去装载具体的日志系统,并获得实现该Log接口的实现类。LogFactory内部装载日志系统的流程如下:

1.首先,寻找org.apache.commons.logging.LogFactory属性配置。

2.否则,利用JDK1.3开始提供的service发现机制,会扫描classpah下的META-INF/services/org.apache.commons.logging.LogFactory文件,

  若找到则装载里面的配置,使用里面的配置。

3.否则,从Classpath里寻找commons-logging.properties,找到则根据里面的配置加载。

4.否则,使用默认的配置:如果能找到Log4j,则默认使用log4j实现,

  如果没有则使用JDK14Logger实现,再没有则使用commons-logging内部提供的SimpleLog实现。

从上述加载流程来看,只要引入了log4j并在classpath配置了log4j.xml,则commons-logging就会使log4j 使用正常,而代码里不需要依赖任何log4j的代码。

未完......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息