官网:http://logging.apache.org/log4j/1.2/manual.html

三大组件:loggers,appenders,layouts。

Loggers
Logger是一个层次化的结构,例如:“java”是“java.util”的父亲,是“java.util.Vector”的祖先。
在log4j中存在一个根Logger,它具备2个属性:(1)总是存在;(2)不能通过名称获取到,但是通过静态方法Logger.getRootLogger()获取到。
除了根Logger之外的其他Logger可以通过Logger.getLogger()方法实例化并返回实例化后的对象。
Logger可以指定级别,可选的日志级别包括:TRACE, DEBUG, INFO, WARN, ERROR,FATAL,这些日志级别在类org.apache.log4j.Level中定义。
log4j中的日志级别是有序的,他们的顺序关系是:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
而且,只能是低级别的日志可以记录高级别的日志。例如:如果C是一个Logger示例,且它被声明为INFO级别,那么它只能记录INFO及以上级别的日志:INFO,WARN,FATAL;不能记录比INGO级别低的日志:TRACE,DEBUG。
只要参数相同:static public Logger getLogger(String name)或static public Logger getLogger(Class clazz)将返回同一个示例对象,即:

Logger logger1 = Logger.getLogger(Test.class);
Logger logger2 = Logger.getLogger(Test.class);
System.out.println(logger1 == logger2); # 输出结果为true

实际上,getLogger(String name)和getLogger(Class clazz)实例化对象时调用的是同一个方法:LogManager.getLogger(clazz.getName())。

static public Logger getLogger(String name) {
  return LogManager.getLogger(name);
} static public Logger getLogger(Class clazz) {
  return LogManager.getLogger(clazz.getName());
}

Appenders/Layouts
Appender定义了日志输出目的地,log4j允许将日志输出到任何目的地(且可以同时将日志消息输出到多个目的地,及配置多个appender)。目前已经实现的输出路径如下:

- SyslogAppender:将日志消息发送到远程syslog程序
- SocketAppender:将日志消息发送远程日志服务器
- ConsoleAppender:将日志消息输出到控制台,默认为System.out
- DailyRollingFileAppender:按天为单位记录日志消息,存在线程同步问题(会丢失数据),建议使用RollingFileAppender
- RollingFileAppender:将日志消息输出到指定大小的文件中,可以根据指定大小将系统日志切割为多个文件

Layout则用于格式化日志消息,常用日志输出格式有:%d,%p,%t,%c,%m,%n。

举个例子:org.apache.log4j.PatternLayout指定格式为:%r [%t] %-5p %c - %m%n,则输出的日志结果为:

176 [main] INFO org.foo.Bar - Located nearest gas station

日志输出格式解释:

- %r:程序启动时间毫秒数
- %t:输出日志线程名称
- %-5p:日志级别
- %c:输出日志的logger实例名称
- %m%n:日志描述

更加详细的日志输出格式见:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

log4j配置
log4j 1.x配置可以有2种方式:
(1)编程方式进行配置,不推荐。
(2)文件方式配置,支持xml和properties两种文件格式。

properties配置文件示例1(输出到控制台):

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n # 明确设置某个包及其子包下的输出的日志级别
log4j.logger.com.foo=WARN

properties配置文件示例2(输出到控制台以及文件):

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

properties配置文件示例3(输出不同级别日志到不同文件)

### set log levels ###
log4j.rootLogger = DEBUG,CONSOLE,D,E ### 输出到控制台 ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%p] %m%n ### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${user.home}/log/test.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} [%p] %m%n ### 输出错误日志到指定文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ${user.home}/log/test.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

log4j初始化过程
(1)log4j根据系统变量值log4j.defaultInitOverride决定是否进行初始化过程,默认为true。
(2)根据变量值log4j.configuration指定配置文件,默认值为:log4j.properties。
(3)尝试将log4j.configuration变量值转换为URL。
(4)如果第(3)失败,即出现异常MalformedURLException,将调用org.apache.log4j.helpers.Loader.getResource(resource, Logger.class)方法在classpath路径下查找配置文件并返回URL。
(5)如果第(4)失败,放弃初始化;否则使用找到的该URL初始化log4j。默认使用PropertyConfigurator初始化,如果配置文件为xml格式,则使用DOMConfigurator初始化。

【参考】:
http://www.codeceo.com/article/log4j-usage.html  最详细的Log4j使用教程

细说log4j之log4j 1.x的更多相关文章

  1. log4j日志文件 log4j.xml log4j.properties配置

    1,导入log4j  jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...

  2. 【Log4j】 log4j.properties 使用

    一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...

  3. Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较

    Log4j.Log4j 2.Logback.SFL4J.JUL.JCL的比较 之前就知道有好几种日志框架,但是一直都是听别人讲,在什么时候该用何种logger,哪种logger比较好……一直对Log4 ...

  4. Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解

    快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录     (如何处理日志) Appender:日志输出目的地,负责日志的输出  (输出到什么 地方) Layo ...

  5. Log4j – Configuring Log4j 2 - Log4j 2的配置

    Configuration Inserting log requests into the application code requires a fair amount of planning an ...

  6. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用

    log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n  ---internationalization  不就是i和n之间有18个字母... http://logging.a ...

  7. maven web项目配置log4j,及log4j参数设置

    本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...

  8. Log4j:log4j.properties 配置解析

    Log4j 三个主要组件 Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要的日志信息. Appenders (输出源):日志输出到什么地方,可以是控制台.文件.流位置.数据库,等 ...

  9. Log4j介绍,log4j.properties配置详解

    http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...

随机推荐

  1. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  2. ViewHolder模式的简洁写法

    大家通常怎么写ViewHolder呢? ViewHolder holder = null; if(convertView == null){ convertView = mInflater.infla ...

  3. 【BZOJ5305】[HAOI2018]苹果树(组合计数)

    [BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...

  4. ajaxmin.exe 命令参数

    这个工具用来压缩JS和CSS文件的,可去掉多余空格,换行,还修改函数名变得难以读取等. 下载这工具,下载之后是一个.msi文件可以安装.安装之后在命令行里操作即可 (下载地址和文档) http://a ...

  5. [ZJOI2012]灾难(建图)

    阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过生物的阿米巴告诉小强,草 ...

  6. LNOI2014LCA(树链剖分+离线操作+前缀和)

    题意:给一棵有根树,有多组询问,询问为l r z,求下标为l到r之间的点和z的lca的深度和. 如果我们一个一个求.emmmmm... 考虑答案怎么产生,仔细想一想,如果我们把l到r的所有点到根都加上 ...

  7. HDU6280 From Tree to Graph

    下午打了湘潭邀请赛,好像缓解了一下北京网络赛超强的自闭感.补一下这个图论题.(补了很久) 题意:给你一颗n节点的树,有m个操作,每次向xi和lca(xi,yi)连边,然后每次zi就是对于新的图在删除每 ...

  8. 20165223 week2学习查漏补缺

    标识符.字符集.关键字 基本数据类型 逻辑类型:boolean 常量:true.false 变量:boolean赋值 整数类型:byte.short.long.int 注意long型后缀L Java没 ...

  9. A1131. Subway Map (30)

    In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...

  10. A1127. ZigZagging on a Tree

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...