log4j基础及使用 - [程序人生]

转载 2007年09月19日 13:57:00

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

%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为" ",Unix平台为" "
%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)web应用的classpath下的log4j.properties是log4j的默认配置,log4j的jar包自动读取,例如/web-inf/classes/log4j.properties。
现 在来看log4j.properties配置文件的意义。第一行指定了根Logger的级别是DEBUG,并将此指定输出到A1。A1就是第二行定义的 org.apache.log4j.ConsoleAppender,此行表示将A1输出到控制台。第三行规定了输出到A1的格式为 org.apache.log4j.PatternLayout。第四行规定了输出到A1格式的转换模式为 org.javaresearch.log4j.TestLog4J。
很多成熟的服务器类的软件日志信息会输出到控制台,同时输出到日志文件备查。使用Log4J可以在不改变任何代码的情况下,仅通过修改配置文件就可以轻松地完成这项功能。相关配置文件如下:
#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=debug, stdout, R
# Print only messages of priority WARN or higher for your category
log4j.category.your.category.name=WARN
#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller"s file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
这 个配置文件指定了两个输出源stdout和R。前者把日志信息输出到控制台,后者是一个轮转日志文件。最大的文件是100KB,当一个日志文件达到最大尺 寸时,Log4J会自动把example.log重命名为example.log.1,然后重建一个新的example.log文件,依次轮转。
Log4j中有五级logger
#FATAL 0
#ERROR 3
#WARN 4
#INFO 6
#DEBUG 7
Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
2)log4j.xml配置文件
在Web应用中使用
在Web 应用中,应该在哪儿对Log4J进行配置呢?首先要明确,Log4J必须在应用的其它代码执行前完成初始化。因为Servlet是在Web服务器启动时立 即装入的,所以,在Web应用中一般使用一个专门的Servlet来完成Log4J的配置,并保证在web.xml的配置中,这个Servlet位于其它 Servlet之前。下面是一个例子,代码如下:
package com.cvicse.finance.ecrs.tools;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.xml.DOMConfigurator;
/**
 * Description:Log4JServlet
 * Copyright: Copyright (c) 2005
 * Company: CVIC SE
 * @author Jessica Tang
 * Created at 2005-9-14
 */
public class Log4JServlet extends HttpServlet {
 public void init() throws ServletException {
  String path = getServletContext().getRealPath("/");
  System.out.println("Jessica:" + path);
  String profile = path + getInitParameter("profile");//对应web.xml
  DOMConfigurator.configure(profile);
 }
}
附:web.xml部分

  Log4jServlet
  com.cvicse.finance.ecrs.tools.Log4JServlet
  
   
profile
     
/WEB-INF/log4j.xml
  
  1
 

 

Log4j 是使用的最广泛的logging框架之一。
我碰到的最多人问的问题就是:为什么用了Log4j之后,我的程序占用那么多的CPU?是不是Log4j的设计有问题啊?

这里我把Log4j常见的一些问题列出来,供大家参考:


1)Log4j告诉我说没有正确初始化,怎么办?
现象:
运行程序时出现
log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.

原因:
Log4j的日志输出需要一个appender,appender的类型有stdout,file,database table,syslog等。
如果指定的Logger没有并且它所有的祖先也没有appender的话,那么就会出上面这个错误。
记住: log4j是没有缺省的target appender的。

解决方法:
最简单的就是所有Logger的祖先设置appender。
在程序运行目录下面创建一个文件:log4j.properties
内容为:
log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.Patte

2)log4j优化

有多少人用Log4j的时候会在每一个Debug/Info之前加一个判断?
可能很多人都说了,这有什么关系,我在运行的时候是把Log Level设置成Error的。
那么请看下面这个代码:
String result;
...
...
...
logger.debug("result is" + result );
再看看这个代码:
String result;
...
...
...
if(logger.isDebugEnabled())
{
       logger.debug("result is" + result );
}
把Log Level设置成ERROR,运行结果又区别吗?没有!!
程序的性能有区别吗?区别大了!!!
因为什么呢?
虽然第一段代码也不产生Log输出,但是debug()里面的字符串变量是实例化了,明白了吗?
这个就是为什么很多人抱怨Log4j占用很大CPU时间的原因了,尤其是在大循环的时候。
赶快在你的程序中加上这样的判断条件吧。

Log4j使用

相对路径:

InforWeb中配置例子:../deploy/jtzw/logs/JtzwApp.log

Tomcat中配置例子:../webapps/jtzw/logs/JtzwApp.log"

绝对路径很简单,指对路径即可。

 

相关文章推荐

tomcat7日志管理--基础知识、配置、以及使用log4j做日志分割

一直想研究一下tomcat的日志管理

Java基础学习总结(39)——Log4j 1使用教程

1. 配置文件 Log4J配置文件的基本格式如下: #配置根Logger log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appender...

使用Log4j进行日志控制,在访问程序时总是出现警告消息

在做log4j的日志中,发现访问每个action的时候,日志都会有jin
  • zfc0826
  • zfc0826
  • 2014年04月22日 11:26
  • 707

Log4j 基础和使用方法

log4j基本使用

在应用程序中使用log4j

http://www.blogjava.net/qiyadeng/articles/13819.htm 1、在应用程序中使用log4j 2、把log4j-*.*jar放入CLASSPATH变量...

Log4J在javaWeb应用程序中的使用

日志处理是每一个项目开发中必须的,很多公司自己独立自主开发自己的日志组件,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。     Log4...

详解log4j2(上) - 从基础到实战

log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。如果已经掌握...
  • autfish
  • autfish
  • 2016年04月20日 23:23
  • 35897

Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置

1.什么是Spring,有什么作用  --Spring框架属于一个解决方案框架,可以对其他技术和框架进行整合应用。  --*好处是:将程序中的各个组件和框架技术进行解耦,便于日后系统维护,升级和扩展操...

【SSH三大框架】Struts2基础第七篇:log4j打印出日志信息

log4j输出日志信息
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:log4j基础及使用 - [程序人生]
举报原因:
原因补充:

(最多只允许输入30个字)