细说log4j之log4j 1.x
官网: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的更多相关文章
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- 【Log4j】 log4j.properties 使用
一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...
- Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
Log4j.Log4j 2.Logback.SFL4J.JUL.JCL的比较 之前就知道有好几种日志框架,但是一直都是听别人讲,在什么时候该用何种logger,哪种logger比较好……一直对Log4 ...
- Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解
快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 地方) Layo ...
- Log4j – Configuring Log4j 2 - Log4j 2的配置
Configuration Inserting log requests into the application code requires a fair amount of planning an ...
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
- maven web项目配置log4j,及log4j参数设置
本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...
- Log4j:log4j.properties 配置解析
Log4j 三个主要组件 Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要的日志信息. Appenders (输出源):日志输出到什么地方,可以是控制台.文件.流位置.数据库,等 ...
- Log4j介绍,log4j.properties配置详解
http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...
随机推荐
- P3723 [AH2017/HNOI2017]礼物
题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1 c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...
- 08 Zabbix4.0系统配置事件通知 - 动作Action
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix4.0系统配置事件通知 - 动作Action 请点击查看Zabbix3.0.8版 ...
- 【BZOJ5302】[HAOI2018]奇怪的背包(动态规划,容斥原理)
[BZOJ5302][HAOI2018]奇怪的背包(动态规划,容斥原理) 题面 BZOJ 洛谷 题解 为啥泥萌做法和我都不一样啊 一个重量为\(V_i\)的物品,可以放出所有\(gcd(V_i,P)\ ...
- Dynamic CRM 2015学习笔记(3)oData 查询方法及GUID值比较
本文将比较二种查询字符串在同一个oData查询方法中的不同,另外,还将介绍如何比较不同方法返回的GUID的值. 用同一个oData查询方法,如果传入查询的字符串不一样,返回结果的格式竟然完全不一样. ...
- cf1000F One Occurrence (线段树)
这题我是离线做的 设i位置的数上次出现的位置是pre[i](如果第一次出现那就是0) 可以想到,用线段树维护一个区间的pre的最小值,如果它小于区间左端点,那这个数就是一个合法的答案 但直接这样做是错 ...
- A/D和D/A的学习
从我们学到的知识了解到,我们的单片机是一个典型的数字系统.数字系统只能对输入的数字信号进行处理,其输出信号也是数字信号.但是在工业检测系统和日常生活中的许多物理量都是模拟量,比如温度.长度.压力.速度 ...
- 对于submit text3运行Python脚本的解决方法
先抛出一些配置信息吧 电脑安装了Python2和Python3两种版本,并且还改了exe文件的名字,可能这与默认的submit text3配置不同了吧,导致错误. 先抛出一些错误吧 首先,自动CTRL ...
- Ubuntu下redis数据库的安装和配置详细过程
Redis 安装 当前redis最新稳定版本是4.0.9 当前ubuntu虚拟机中已经安装好了redis,以下步骤可以跳过 最新稳定版本下载链接:http://download.redis.io/re ...
- Windows系统服务管理
1.用SC命令管理: 启动redis服务: C:\Users\Administrator>sc start redis 停止redis服务: C:\Users\Administrator> ...
- js 字符与ASCII码互转
将字符转为ASCII码 var str = "A"; str.charCodeAt(); var str1 = 'a'; str1.charCodeAt(); 将ASCII码转为字 ...