[原创]log4j  日志使用介绍_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3695 | 回复: 0   主题: [原创]log4j  日志使用介绍        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-11-7 18:10:20 | [全部帖] [楼主帖] 楼主

Log4j  的使用

1、为什么要用日志?

   一个程序代码没有日志说明实现是不方便定位问题和理解代码。而使用System.out.println()功能太弱,而且不易控制。如果暂时不想输出了?如果想输出到文件?目前最常使用的就是commons-logging 和 log4j commons-logging的目的是为“所有的Java日志实现”提供一个统一的接口,log4j的功能非常强大,目前日志使用的首选。它们有助于代码调试和分析。

Log4j的组成:

Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)

Logger:控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制:Appenders指定了日志将打印到控制台还是文件中;Layout则控制日志信息的显示格式。

其配置文件log4j.properties 就是用来配置相关参数,让我们将不同级别的日志信息以哪一种格式输出到我们想要的位置,比如控制台,文件中

级别(Level

         debug()   输出“调试”级别的日志信息;

         info()      输出“信息”级别的日志信息;

         warn()    输出“警告”级别的日志信息;

         error()     输出“错误”级别的日志信息;

        fatal()      输出“致命错误”级别的日志信息;

根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试(DEBUG)”“信息(INFO)”“警告(WARN)”“错误(ERROR)”“致命错误(FATAL)”。将日志分成不同的级别可以让我们更好的控制它,比如,对开发人员来说需要定位错误之类的,可能需要看到更多的详细信息,级别可以设为“debug”,而对于用户来说,只需要“警告”级别的以上的信息。

Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


Log4j提供的layout有以下几种: 

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


Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: 

%m 输出代码中指定的消息  

%p 输出优先级,即DEBUGINFOWARNERRORFATAL 

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似: 20021018 22102892l

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

Logger对象的获得或创建:

常用的方法有两种:

private static Log log = LogFactory.getLog(TestLog.class);  //commons-logging
static Logger logger = Logger.getLogger(TestLog4j.class);   //log4j


其中调用Logger.getLogger(Class clazz)是目前ogger对象最理想的方法。

以一个 log4j.properties 为例来说明

#控制日志的相关级别,以及输出的位置,第一个参数是级别,后面的都是日志输出的目的地
log4j.rootLogger=INFO, stdout, logfile
#配置输出的目的地,这里是输出到控制台
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} [%c]-[%p] %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${webapp.root}/logs/webapp.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n


将其使用到一个web项目中的方法

将 commons-logging.*.jar  和 log4j*.jar 导入到classpath, 将log4j.properties 放入到src 下面,在web.xml 中加入如下配置

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>log4jConfigListener</servlet-name>
<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>


*.java中可以使用

static Logger logger = Logger.getLogger(TestLog4j.class);


Logger.info(message);来调用




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论