log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。
首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:
http://logging.apache.org/log4j/1.2/download.html
我们先看一个最简单的示例:
【示例1】
项目结构:
【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar档的Java工程,然后将jar档放到lib目录下。在要使用的工程中按图所示进行引用
】
Java代码:
-
package
com.coderdream.log4j;
-
-
import
org.apache.log4j.Logger;
-
-
public
class
HelloLog4j {
-
-
private
static
Logger logger = Logger.getLogger(HelloLog4j.
class
);
-
-
-
-
-
public
static
void
main(String[] args) {
-
-
-
-
logger.debug("This is debug message."
);
-
-
logger.info("This is info message."
);
-
-
logger.error("This is error message."
);
-
}
-
}
配置文件log4j.properties:
-
#可以设置级别:debug>info>error
-
#debug:显示debug、info、error
-
#info:显示info、error
-
#error:只error
-
log4j.rootLogger=debug,appender1
-
#log4j.rootLogger=info,appender1
-
#log4j.rootLogger=error,appender1
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#样式为TTCCLayout
-
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
输出结果:
-
[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
-
[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
-
[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.
通过配置文件可知,我们需要配置3个方面的内容:
1、根目录(级别和目的地);
2、目的地(控制台、文件等等);
3、输出样式。
下面我们来看看Log4J的类图:
Logger - 日志写出器,供程序员输出日志信息
Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去
ConsoleAppender - 目的地为控制台的Appender
FileAppender - 目的地为文件的Appender
RollingFileAppender - 目的地为大小受限的文件的Appender
Layout - 日志格式化器,用来把程序员的logging request格式化成字符串
PatternLayout - 用指定的pattern格式化logging request的Layout
Log4j基本使用方法
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就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。
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有以e几种:
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.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 ) ;
示例2~示例8
【示例2】
输出为文本文件或HTML文件
-
#设置级别:
-
log4j.rootLogger=debug,appender1
-
-
#输出到文件(这里默认为追加方式)
-
log4j.appender.appender1=org.apache.log4j.FileAppender
-
#设置文件输出路径
-
#【1
】文本文件
-
#log4j.appender.appender1.File=c:/Log4JDemo02.log
-
#【2
】HTML文件
-
log4j.appender.appender1.File=c:/Log4JDemo02.html
-
#设置文件输出样式
-
#log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
-
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
【
示例3】
输出为文本文件或HTML文件
-
#设置级别和多个目的地
-
log4j.rootLogger=debug,appender1,appender2
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#设置输出样式
-
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
-
-
#输出到文件(这里默认为追加方式)
-
log4j.appender.appender2=org.apache.log4j.FileAppender
-
#设置文件输出路径
-
#【1
】文本文件
-
#log4j.appender.appender2.File=c:/Log4JDemo02.log
-
#【2
】HTML文件
-
log4j.appender.appender2.File=c:/Log4JDemo02.html
-
#设置文件输出样式
-
#log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
-
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
【示例4】
SimpleLayout样式
-
#设置级别和目的地
-
log4j.rootLogger=debug,appender1
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#设置输出样式
-
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
输出结果:
-
DEBUG - This is debug message.
-
INFO - This is info message.
-
ERROR - This is error message.
【示例5】
自定义样式
-
#设置级别和目的地
-
log4j.rootLogger=debug,appender1
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#设置输出样式
-
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
-
#自定义样式
-
# %r 时间 0
-
# %t 方法名 main
-
# %p 优先级 DEBUG/INFO/ERROR
-
# %c 所属类的全名(包括包名)
-
# %l 发生的位置,在某个类的某行
-
# %m 输出代码中指定的讯息,如log(message)中的message
-
# %n 输出一个换行
-
-
log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n
输出结果:
-
0
[main] [DEBUG] - com.coderdream.log4j.HelloLog4j
-
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16
) -This is debug message.
-
31
[main] [INFO] - com.coderdream.log4j.HelloLog4j
-
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18
) -This is info message.
-
31
[main] [ERROR] - com.coderdream.log4j.HelloLog4j
-
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20
) -This is error message.
【示例6】
多目的地、自定义样式
-
#设置级别和目的地
-
log4j.rootLogger=debug,appender1,appender2
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#设置输出样式
-
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
-
#自定义样式
-
# %r 时间 0
-
# %t 方法名 main
-
# %p 优先级 DEBUG/INFO/ERROR
-
# %c 所属类的全名(包括包名)
-
# %l 发生的位置,在某个类的某行
-
# %m 输出代码中指定的讯息,如log(message)中的message
-
# %n 输出一个换行符号
-
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
-
-
#输出到文件(这里默认为追加方式)
-
log4j.appender.appender2=org.apache.log4j.FileAppender
-
#设置文件输出路径
-
#【1
】文本文件
-
log4j.appender.appender2.File=c:/Log4JDemo06.log
-
#设置文件输出样式
-
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
-
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例7】
【企业应用】设置
特定包的级别和目的地
先增加一个包,新建一个类:
-
package
com.coderdream.log4jDao;
-
-
import
org.apache.log4j.Logger;
-
-
public
class
HelloDao {
-
private
static
Logger logger = Logger.getLogger(HelloDao.
class
);
-
-
-
-
-
public
static
void
main(String[] args) {
-
-
logger.debug("This is debug message from Dao."
);
-
-
logger.info("This is info message from Dao."
);
-
-
logger.error("This is error message from Dao."
);
-
}
-
}
如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService等等,则我们可以将各层的日志信息分类输出到各个文件。
-
#省略根,只设置特定包的级别和目的地
-
log4j.logger.com.coderdream.log4j=debug,appender1
-
log4j.logger.com.coderdream.log4jDao=info,appender1,appender2
-
-
#输出到控制台
-
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
-
#设置输出样式
-
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
-
#自定义样式
-
# %r 时间 0
-
# %t 方法名 main
-
# %p 优先级 DEBUG/INFO/ERROR
-
# %c 所属类的全名(包括包名)
-
# %l 发生的位置,在某个类的某行
-
# %m 输出代码中指定的讯息,如log(message)中的message
-
# %n 输出一个换行符号
-
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
-
-
#输出到文件(这里默认为追加方式)
-
log4j.appender.appender2=org.apache.log4j.FileAppender
-
#设置文件输出路径
-
#【1
】文本文件
-
log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log
-
#设置文件输出样式
-
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
-
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
【示例8】
log4j.xml的配置方式
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-
<
log4j:configuration
xmlns:log4j
=
"http://jakarta.apache.org/log4j/"
>
-
-
<
appender
name
=
"appender1"
-
class
=
"org.apache.log4j.RollingFileAppender"
>
-
<
param
name
=
"File"
value
=
"logfile08.html"
/>
-
<
param
name
=
"MaxFileSize"
value
=
"1MB"
/>
-
<
param
name
=
"MaxBackupIndex"
value
=
"5"
/>
-
<
layout
class
=
"org.apache.log4j.HTMLLayout"
>
-
</
layout
>
-
</
appender
>
-
-
<
root
>
-
<
level
value
=
"debug"
/>
-
<
appender-ref
ref
=
"appender1"
/>
-
</
root
>
-
</
log4j:configuration
>
为了提高效率,我们可以在写日志前增加判断:
-
-
if
(logger.isDebugEnabled()) {
-
logger.debug("This is debug message from Dao."
);
-
}
-
-
-
if
(logger.isInfoEnabled()) {
-
logger.info("This is info message from Dao."
);
-
}
-
-
-
logger.error("This is error message from Dao."
);
参考资料:
1、log4j 详
解(
一)
2、log4j 详解(二)
3、Log4j基本使用方法
4、Log4j 用法(一)
5、log4j.properties 使用说明
6、Apache Log4j详解
7、log4j.xml配置详解
8、log4j.xml配置详解
分享到:
相关推荐
Log4j简明手册 转载的资料 希望对大家有用
国内可能打不开官网,所以在这里转载,...此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
主要技术:Java、springmvc、mybatis、mysql、tomcat、jquery、JavaScript、html、css、jsp、log4j等一些常见的基本技术。 ———————————————— 版权声明:本文为CSDN博主「java李阳勇」的原创文章,...
转载资源:java利用COM发短信用JAR包. 发现通过SMSLib发送程序还是比较麻烦的,他的日志采用的是slf4j,而slf4j是基于log4j的,这几个不同的JAR包都是在不同的地方下载的,在此所有的JAR整理出来,希望大家节约时间.
主要技术:Java、spring、mysql、tomcat、jquery、JavaScript、html、css、jsp、log4j等一些常见的基本技术。 ———————————————— 版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-...
【原创整理,严禁转载,转载必究】 参考 文献 [1]李维安;王鹏程;徐业坤.慈善捐赠、政治关联与债务融资——民营企业与Z F的资源交换行为[J].南开管理评论,2015,18(01):4-14. [2] 许年行;李哲.高管贫困经历与企业慈善...
本人学习struts的小例子,包含多模块处理、中文化处理、数据验证、Log4J使用、重复提交解决等问题,还包含部分ejb,转载了myeclipse配置weblogic和jboss的文章。 包含源代码。
这些jar包可能包括Struts2、Spring、Hibernate的库,以及其他如log4j、servlet API等运行所需的类库。开发者可以通过分析这些库文件来理解项目的构建环境和依赖结构。 综合来看,这个项目是一个关于如何利用JSR 168...
8. **异常处理与日志记录**:SpringBoot支持统一的异常处理机制,并集成了Logback或Log4j等日志框架,便于调试和监控系统状态。 9. **单元测试与集成测试**:为了保证代码质量,项目中可能会包含JUnit或Spock等单元...
第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...
第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...
第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...
第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...
图像锐化(2010-08-03 16:10:31)转载▼标签: 杂谈 分类: Matlab MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。...
7. **日志记录**:为了追踪爬虫运行状态和调试问题,项目可能使用了日志记录工具,如Log4j,记录爬虫运行过程中的重要信息。 8. **URL管理**:为了避免重复爬取同一个URL,通常会使用URL队列或集合来存储已访问过的...
在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:*.tmp、*._mp)日志文件(*.log)、临时帮助文件(*.gid)、磁盘检查文件(*.chk)、临时备份文件(如:*.old、*.bak)以及其他临时文件。...
之后的执行“取消”后的结果如下:(配置了"log4j.properties"才能看到该结果) 21:23:44,676 WARN StreamResult:45 - StreamResultX Warn : socket write error 如果出现该警告说明正确执行,该警告说明,...