Log4j 日志

摘要:
日志是应用软件不可或缺的一部分。Apache的开源项目Log4j是一个强大的日志组件,可以提供方便的日志记录。Log4j有六个通用日志级别。Log4j建议只使用四个级别。优先级从高到低依次为ERROR、WARN、INFO和DEBUG。日志4j。附加程序。附加名。文件=日志。注意,在特定配置中,appendername被appender的别名替换。

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。Log4j是Apache基金会的一个项 目,Log4j是一个基于Java的日志组件,Log4j是Java的几个日志框架中的一种。

日志记录器(Logger)是日志处理的核 心组件。log4j具有6种一般的日志级别(Level)。 日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html): 

public static final Level  TRACE
The TRACE Level designates finer-grained informational events than the DEBUG. Since:1.2.12

static Level DEBUG 
DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。

static Level INFO 
INFO level表明消息在粗粒度级别上突出强调应用程序的运行过程。 

static Level WARN
WARN level表明会出现潜在错误的情形。

static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。

另外,还有两个可用的特别的日志记录级别: (以下描述来自log4j API http://jakarta.apache.org/log4j/docs/api/index.html): 
static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。 

static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。 

日志记录器(Logger)的行为是分等级的。具体分为:OFF、 FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。程序会打印高于或等于所 设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。

1.Log4j的优点

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

log4j的好处在于:

(1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。

(2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(......)等)。

(3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。

2.配置文件

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG 、TRACE 、ALL ,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

2.1 日志信息的优先级

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。 通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。 如在这里定义了INFO级别,则应用程序中所有低于INFO级别的日志信息将不被打印出来。

2.2 输出源的使用

有选择的能用或者禁用日志请求仅仅是Log4j的一部分功能。Log4j允许日志请求被输出到多个输出源。用Log4j的话说,一个输出源被称做一个Appender。

Appender包括console(控制台), files(文件), GUI components(图形的组件), remote socket servers(socket 服务), JMS(java信息服务), NT Event Loggers(NT的事件日志), remote UNIX Syslog daemons(远程UNIX的后台日志服务)。它也可以做到异步记录。 一个logger可以设置超过一个的appender。 用addAppender方法添加一个appender到一个给定的logger。对于一个给定的logger它每个生效的日志请求都被转发到该logger所有的appender上和该logger的父辈logger的appender上。

        2.2.1 ConsoleAppender

如果使用ConsoleAppender,那么log信息将写到Console。效果等同于直接把信息打印到System.out上了。

    2.2.2 FileAppender

使用FileAppender,那么log信息将写到指定的文件中。这应该是比较经常使用到的情况。 相应地,在配置文件中应该指定log输出的文件名。如下配置指定了log文件名为log.txt。

log4j.appender.appendername.File=log.txt 注意将appendername替换为具体配置中Appender的别名。

注意:指定的log文件路径问题(默认为tomcatwebapp目录)

          2.2.3 DailyRollingAppender

使用FileAppender可以将log信息输出到文件中,但是如果文件太大了读起来就不方便了。这时就可以使用DailyRollingAppender。DailyRollingAppender可以把Log信息输出到按照日期来区分的文件    中。配置文件就会 每天(时间可以设定)产生一个log文件,每个log文件只记录当天的log信息:

#log to file
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#the file path base on ${catalina_home}/webapp
log4j.appender.logfile.File=../logs/hrm.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%c] - %m%n

            2.2.4 RollingFileAppender

文件大小到达指定尺寸的时候产生一个新的文件。

log4j.appender.R=org.apache.log4j.RollingFileAppender
#文件设置在tomcat目录下的logs子目录中
log4j.appender.R.File=../logs/hrm.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

 这个配置文件指定了输出源 R ,是一个轮转日志文件。最大的文件是100KB,当一个日志文件达到最大尺寸时,Log4J会自动把hrm.log重命名为hrm.log.1 ,然后重建一个新的hrm.log文件,依次轮转。

2.2.5 WriterAppender

将日志信息以流格式发送到任意指定的地方。

2.3 Layout的配置

Layout指定了log信息输出的样式。

2.3.1 布局样式

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

  2.3.2 格式

%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},输出类似:20021018221028921  
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(Test Log4.java:10)

 

3、完整例子

log4j.rootLogger=debug, stdout, logfile

#log to console
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,SSS} [%t] %-5p [%c] - %m%n

#log to file
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#the file path base on ${catalina_home}/webapp
log4j.appender.logfile.File=../logs/hrm.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p [%c] - %m%n

#log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#log4j.appender.logfile.File=../logs/hrm.log
#log4j.appender.logfile.MaxFileSize=100KB
#log4j.appender.logfile.MaxBackupIndex=1
#log4j.appender.logfile.layout.ConversionPattern=%p %t %c - %m%n

免责声明:文章转载自《Log4j 日志》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【腾讯Bugly干货分享】QFix探索之路—手Q热补丁轻量级方案封装原生Ajax 和 Axios的 二次封装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

rocket mq 入门文档

原文地址: http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/ 感谢原作者 十分钟入门RocketMQ 本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件否可以解...

【转】WPF之DataGrid应用

前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨。网络上的解决方法太多,但也太杂。没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果。因此,把我学到的和大家分享一下,相信这篇文章会让你再很短的时间内学会DataGrid的大部分主要功能,而且很多难点都可以在里面找到解决方案。 由于涉及的应用...

OpenStack各组件的常用命令

openstack命令 openstack-service restart #重启openstack服务 openstack endpoint-list #查看openstack的端口 nova的常用命令 nova list #列举当前用户所有虚拟机 nova show ID #列举某个虚机的详细信息 nova delete ID #直接删除某个虚机 no...

Spark应用程序运行的日志存在哪里(转)

原文链接:Spark应用程序运行的日志存在哪里 在很多情况下,我们需要查看driver和executors在运行Spark应用程序时候产生的日志,这些日志对于我们调试和查找问题是很重要的。   Spark日志确切的存放路径和部署模式相关:  (1)、如果是Spark Standalone模式,我们可以直接在Master UI界面查看应用程序的日志,在默认...

MySQL-锁

1. 公平锁与非公平锁   公平锁:严格按照线程启动的顺序执行,不允许其他线程插队执行;非公平锁允许插队;   当使用非公平锁时,会立刻尝试配置状态,成功则:插队执行,失败则:与公平锁一样调用acquire()方法,以排他方式获取锁,成功后立刻返回,否则将线程加入队列,直到成功调用为止。 2. 悲观锁与乐观锁   两种常见的资源并发锁设计。   悲观锁:先...

动态配置log4j2.xml日志输出文件的位置

目标:根据启动jar时传进main()的参数动态修改日志位置 一、修改启动项  MainMapLookup.setMainArguments(args);注:不要在lookup设置之前初始化log(如:private static final Logger log = LoggerFactory.getLogger(HttpServer.class);)...