`
mikehuhu
  • 浏览: 11663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习log4j手册笔记-1

    博客分类:
  • java
阅读更多

<!----><!----><!---->

这两天看了下 log4j 手册,记录一下

做过的项目中有不少需要记录运行日志的,其中相当一部分使用了 log4j ,因为简单方便并且 JCL 推荐,用到最多的就是其中的 ConsoleAppender RollingFileAppender ,配置一下 Layout File 等就可以了,在深入的就没有用过了 :->, 现在发现 log4j 还有很多貌似不错的功能 ~~

       先来个简单的配置文件, Properties 格式的

#home path

HomePath = C : /temp/log

log4j.rootCategory= DEBUG,stdout

log4j.appender.stdout= org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout= org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH : mm:ss} [%F:%L] [%c]-[%p] %m%n

#oo

log4j.logger.com.xx= ALL,oo

log4j.logger.com.xx.Threshold= INFO

log4j.appender.oo= org.apache.log4j.RollingFileAppender

log4j.appender.oo.File= ${HomePath}/websms.log

log4j.appender.oo.MaxFileSize= 4000KB

log4j.appender.oo.MaxBackupIndex= 100

log4j.appender.oo.Append= true

log4j.appender.oo.layout = org.apache.log4j.PatternLayout

log4j.appender.oo.layout.ConversionPattern = %-d{yyyy-MM-dd HH : mm:ss} [%c]-[%p] %m%n

<!---->1.  Logger 的层次 <!---->

Log4j 中处于最顶端的是 root logger 了,其默认的 level (在 1.1 priority )是 debug ,及 >=debug 级别的信息都会被记录(其实就是 all )。上面的前半部分就是给 root logger(category) 设置的 debug 级别并添加了一个 appender 。其层次结构可以类比 java 的类层次结构, root logger 相当于 object 。上例中定义了 com.xx 这个 logger ,即出现如下结构

                     Root

                       |

                     [com]------ 该层在 log4j 中不存在,为了提高访问层次的速度

                       |

                     com.xx

log4j 中的很多东西都是依托与层次结构的,例如每一层的 level appender ,如果 com.xx 层没有定义 level ,则会沿着层次往上找, com 当然不存在了,找到 root ,如果 root 肯定有 level 了,也就是 com.xx level ;上面例子中 com.xx 设置了 level 等于 all ,就不必再往上找了。

另一个与层次关系比较密切的就是 appender ,上例中 root 添加了 stdout 输出到 console com.xx 添加了 oo 输出到文件,由于层次中的 appender 默认是下面的拥有上面的 appender ,则对于 com.xx 这个 logger ,如果符合条件的 log 就要即输出到屏幕又输出到文件,并且级别是 INFO (上面由于定义了 Threshold 这个属性)。当然这种 appender 的继承性也可以打断,就是设置某个层次的 additivity=false ,则位于该层次下方的 logger 只能拥有本身定义的 appender 和直到定义了 additivity=false 的上层节点(包括该节点)的层次中的 appender 。另外定义的 Threshold 不能够继承,只能使用本层次所定义的,如果没有就是 null 了, Threshold 优于 level

<!---->2.  Logger 中的 level <!---->

Log4j 中的 level java log 中的 level 基本一致,从低到高依次是 all,debug, info, warn, error, fatal 。一般是调试信息用 debug 即可,提示信息用 info warn error 感觉有交集,分得不是很清楚, fatal 就是有严重的导致程序不能运行下去了。记录日志必然会占用系统资源,导致应用性能有所下降,因此日志应该根据需要适当记录,即使提高了记录的 level ,遇到 log.debug(“”); 同样需要访问 log ,查看其 level 是否允许 debug 等级的日志输出。

<!---->3.  Log 过程 <!---->

在程序中调用 log.info(“”) 后,如果 info 不低于该 log level threshold ,则该信息会封装成 LoggingEvent 对象传递给层次结构中允许的 appender appender 在检查是否符合 filter ,如果有的话,没有被过滤掉的话就会就调用 log layout 对信息进行格式化最后输出到 log 定义的目的地,中间出错就会到该 appender 定义的 errorhandler 那里(如果有)。如果 log.info(obj) ,则会检查有没有符合该 obj 或其父类的 renderer log 信息进行格式化,相当于重新定义了该 obj toString 方法。

<!---->4.log4j 中的 appender

Log4j 提供了 ConsoleAppender RollingFileAppender DailyRollingFileAppender SocketAppender JMSAppender SMTPAppender AsyncAppender

ConsoleAppender :输出到屏幕;

RollingFileAppender :输出到文件,以滚动的方式生成文件。当日志文件大小超过 MaxFileSize ,则已生成的文件 index 会顺序下移,如果文件数量超过了 MaxBackupIndex ,则最旧的以后 log 文件被丢弃了;

DailyRollingAppender :输出到文件,以日期作为文件名称的一部分,日期在文件名 .log 的后面,可以定义日期的格式,粒度可到分钟;

SocketAppender :把日志信息发到某 socket ,及日志文件可存放在不同服务器上,并通过 socket 传送日志。 Log4j 已经写好了一个 org.apache.log4j.net.SimpleSocketServer 可以接收 client 发送来的日志信息,测试了一下,还不错,该 server 可以设置接收日志的存放方式,配置文件与 log4j 一致。

JMSAppender :用 JMS 发送日志,相比 SocketAppender 就是把发送者和接受者松耦合,但是速度就慢了。

SMTPAppender :可以把日志以邮件方式发送,这个项目中还没有用到,如果设置高界别的错误直接发送给维护者,应该不错, J

AsyncAppender :异步发送,可以和其他 appender 一起用,维护一个队列,由同步变为异步了。

各个 appender 都有相应的参数信息 ~~

<!---->5. <!---->Layout

Layout 用的比较多的就是 log4j 自带的 PatternLayout 了,当然也可自己定制个,不过 PatternLayout 已经提供了和 c 中的 printf 类似的输出格式定义,基本可以满足大部分要求。

printf 一样,每个格式化输出都用 % 来表示,例如

%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

c

输出 logger

C

输出调用该 logger class 的全名

d

输出 logging event 中的 date

F

输出调用 logger 的文件名,一般为 xx.java

l

输出调用着的位置信息,在 windows 上会输出类全名,文件和行号

L

输出调用 log 的代码的行号

m

输出 logging event 的信息

M

输出调用 log 的方法名

n

输出平台的分行符

p

输出 log level

r

输出从程序运行开始到 log 是已经耗去的时间

t

输出生成 logging event 的线程的名称

x

输出 NDC

X

输出 MDC

%

输出百分号

还可以定义信息的左右对齐和最小最大长度

%20.30c  表示最小 20 个字符,最大 30 个字符,使用默认的最对齐

%-20.30c  标示……,使用右对齐

<!---->6. <!---->其他

还可以定义 filter 过滤特定的消息;

定义 renderer 格式化特定类的日志形式

MDC NDC 就是定义输出 log 是开头的一些信息, MDC Mapped Diagnostic Context ),定义一些属性值,如果在 pattern 中有这些属性的输出就会查询该属性,输出到 pattern 的相应位置,调用方式是 %X{ 属性名 } NDC Nested Diagnostic Context , 采用是 statck 的方式,会把 push 到栈的内容全部输出。

扩展 log4j ,如果感兴趣 ~~

 

写的比较粗糙,如果需要了解其中的详细,可以看手册;如果理解错误,请多多指教~ J

 

分享到:
评论

相关推荐

    log4j-core-2.15.0.jar log4j-2.15.0-rc2

    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....

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    log4j-api-2.15.0.jar log4j-2.15.0-rc2

    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-over-slf4j-1.7.33-API文档-中文版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

    log4j-to-slf4j-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    log4j-api-2.17.1.jar和log4j-core-2.17.1.jar

    《深入理解log4j-api-2.17.1.jar与log4j-core-2.17.1.jar》 在Java开发中,日志管理是不可或缺的一部分,它帮助我们跟踪程序运行状态、定位错误和调试问题。Log4j作为一款广泛使用的日志框架,历经多次迭代,现在...

    Log4j2学习用到的jar包及apache-log4j-2.19.0-bin.zip

    分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...

    log4j-2.15.0-rc2.zip

    内含log4j-api-2.15.0.jar和log4j-core-2.15.0.jar Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3....

    log4j-over-slf4j-1.7.33-API文档-中英对照版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    此次提及的`log4j-api-2.12.4.jar`和`log4j-core-2.12.4.jar`是Log4j 2框架的两个关键组件,版本号为2.12.4,这个版本主要修复了之前版本中可能存在的安全漏洞。 **log4j-api-2.12.4.jar** 是Log4j 2框架的API模块...

    log4j-api-2.12.1-API文档-中文版.zip

    赠送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-...

    log4j-to-slf4j-2.10.0-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.10.0.jar; 赠送原API文档:log4j-to-slf4j-2.10.0-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.10.0-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.10.0.pom; 包含翻译后...

    log4j-api-2.12.1-API文档-中英对照版.zip

    赠送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-...

    log4j-to-slf4j-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.12.1.jar; 赠送原API文档:log4j-to-slf4j-2.12.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.12.1.pom; 包含翻译后...

    开发工具 log4j-api-2.3

    开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3...

    log4j-core-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-core-2.12.1.jar; 赠送原API文档:log4j-core-2.12.1-javadoc.jar; 赠送源代码:log4j-core-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-core-2.12.1.pom; 包含翻译后的API文档:log4j-...

    apache-log4j-extras-1.2.17-API文档-中文版.zip

    赠送jar包:apache-log4j-extras-1.2.17.jar; 赠送原API文档:apache-log4j-extras-1.2.17-javadoc.jar; 赠送Maven依赖信息文件:apache-log4j-extras-1.2.17.pom; 包含翻译后的API文档:apache-log4j-extras-...

    log4j-to-slf4j-2.17.1-API文档-中英对照版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    log4j-api-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-api-2.17.1.jar; 赠送原API文档:log4j-api-2.17.1-javadoc.jar; 赠送源代码:log4j-api-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-api-2.17.1.pom; 包含翻译后的API文档:log4j-api-...

    log4j.jar各个版本

    log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-...

Global site tag (gtag.js) - Google Analytics