构成
记录器(Loggers):用来记录日志,相当于日志记录对象,这个在配置文件中可能配置多个,用来对不同的目录进行分别记录
根记录器:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
在早期的Log4j版本中,org.apache.Category实现了记录器的功能,为了提高向后兼容 性,Logger扩展了Category,因此rootCategory和rootLogger是可以互换的,但最后Category将从类库中删除,因 此请使用Logger类。
level级别:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别:ERROR、WARN、INFO、DEBUG:
自定义记录器:
这个东西一般在一个较大的项目中会存在多个,以目录为区分.语法为:
log4j.logger.loggerName = [ level ] , appenderName, appenderName, …
例如:
log4j.logger.com.projectx.conf=info,stdout,logfile
log4j.logger.com.projectx.platform=info,stdout,logfile
log4j.logger.com.projectx.modules=warn,stdout,logfile
log4j.loggerojectx.collie=debug,stdout,logfile
log4j.logger.com.projectx.mq=debug,stdout,logfile
log4j.logger.com.projectx.jmx=warn,stdout,logfile
输出源(Appenders):这个用来存放日志信息,可以是控制台,也可以是文件,有如下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
org.apache.log4j.SocketAppender (Socket)
org.apache.log4j.NtEventLogAppender (NT的Event Log)
org.apache.log4j.JMSAppender (电子邮件)
输出源可以进行参数配置:(具体需要哪些参数可以参见源代码)
log4j.appender.appenderName = fully.qualified.name.of.appender.classs
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
布局(Layouts):用来定义输入日志格式,有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息
PatternLayout
这个比较长特殊,各种参数定义如下:
%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.rootCategory=debug //全局记录器,注:这里没要配置输入源,因为下面每一个记录器都配置了输出源,记录器与记录器之间是继承关系,子类会覆盖掉父类的输出源(如果子类指定了,父类就没办法统一控制了),但输出的level级别是可以统一控制的,子类的级别如果高于父类则用子类,否则使用父类级别,例如:root级别为info,则子类为debug的时候日志也只输出info级别的,但子类如果是warn级别,则info不输出
//输出源1:控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender //输出到控制台
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout //自定义布局
log4j.appender.stdout.layout.ConversionPattern=[%d]-%p-[%F:%L]-->>%m%n
//输出源2:日志文件
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=../logs/log4j.out //这里使用相对路径,便于不同平台部署
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d]-%p-[%F:%L]-->>%m%n
//自定义记录器:
log4j.logger.com.projectx.conf=info,stdout,logfile //这里都指定了输出源,如果不指定,则走root配置,如果root也没指定的话,这个我也不知道,没实验过,猜想应该没有日志输出吧
log4j.logger.com.projectx.platform=info,stdout,logfile
log4j.logger.com.projectx.modules=warn,stdout,logfile
log4j.logger.com.projectx.collie=debug,stdout,logfile
log4j.logger.com.projectx.mq=debug,stdout,logfile
log4j.logger.com.projectx.jmx=warn,stdout,logfile
//自定义框架记录器
log4j.logger.org.hibernate=warn,stdout
log4j.logger.org.directwebremoting=warn,stdout
log4j.logger.org.springframework=WARN,stdout
log4j.logger.uk.ltd.getahead.dwr=WARN,stdout
log4j.logger.net.sf.ehcache=WARN,stdout
log4j.logger.org.apache.commons=WARN,stdout
log4j.logger.org.apache.struts=WARN,stdout
log4j.logger.com.opensymphony.xwork2=WARN,stdout
log4j.logger.org.apache.struts2=WARN,stdout
log4j.logger.org.acegisecurity=WARN,stdout
log4j.logger.freemarker=WARN,stdout
log4j.logger.org.apache.activemq=WARN,stdout
log4j.logger.org.quartz=WARN,stdout
代码中使用
代码中使用很简单,如下:
private static Logger log = Logger.getLogger ( XXXXXXXXX.class )
log.info("");
log.debug("");
总结
总的来说,log4j大体上就包含这么多东西。这里我只是做个总结来给自己备忘,一般项目开发过程中尽量不要使用system.out.priintln(),因为这种打印出来的日志不可控。一直都不能静下心来好好学点东西,现在总算是学了这么一点点小东西。整个log4j配置起来不复杂,但它这种实现思想很值得借鉴
分享到:
相关推荐
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
演示了java记录通过log4j2记录日志到mysql数据库中
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...
若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载
Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....
Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...
Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-...
log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...
下面小编就为大家带来老生常谈Log4j和Log4j2的区别(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
描述Log4j2的配置详情及相对Log4j的优点,包括效率测试程序
详细介绍了log4j的使用方法,介绍了java中日志记录如何写入数据库,对于初学者来说很不错的一个文档
log4j-api-2.12.4.jar和log4j-core-2.12.4.jar,该版本避免log4j漏洞问题。
apache下载太慢,特搬到国内下载。修复log4j漏洞log4j2下载最新log4j2.16.0下载
log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,
log4j-API-最新稳定版本log4j-1.2.17 apache log4j-API-最新稳定版本log4j-1.2.17
logging-log4j日志记录 example 用于项目调试工作。。。
赠送jar包:log4j-api-2.12.1.jar; 赠送原API文档:log4j-api-2.12.1-javadoc.jar; 赠送源代码:log4j-api-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-api-2.12.1.pom; 包含翻译后的API文档:log4j-api-...
Log4j2学习笔记,引入log4j2的依赖-log4j2.xml配置模板-application.properties文件配置-使用
Log4j的包下载完成后,解压,将其中打包好的的log4j-1.x.x.jar导入你的工程LIB中。 Log4j之所以受欢迎的原因之一是它的灵活性。Log4j提供了灵活的配置方法,默认是调用BasicConfigurator.configure()来进行配置,但...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...