当前位置: 代码迷 >> Web前端 >> Log4j配备每天生成
  详细解决方案

Log4j配备每天生成

热度:368   发布时间:2012-09-08 10:48:07.0
Log4j配置每天生成
YOYO posted @ 2008年11月06日 20:27 in 【Java EE】 with tags 日志 log4j , 3409 阅读

研究了好久……先在apache.org上下载一个log4j-1.2.15.jar,导入WEB-INF/lib目录下;
写一个log4j.properties,放入src目录,该内容如下:

log4j.rootLogger=INFO,FILE
log4j.addivity.org.apache=true

# FILE
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.Encoding=GBK
log4j.appender.FILE.Threshold=INFO,DEBUG
log4j.appender.FILE.File=WEB-INF\\logs\\log
log4j.appender.FILE.DatePattern='_'yyyyMMdd'.log'
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%p] %m [%c]%n

写一个servlet,加载log4j,并使这些文件保存到服务器目录下:

  1. package bootcamp.common.servlet;
  2. ?
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.util.Properties;
  6. ?
  7. import javax.servlet.ServletConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. ?
  11. import org.apache.log4j.Logger;
  12. import org.apache.log4j.PropertyConfigurator;
  13. ?
  14. public class Log4jInitServlet extends HttpServlet {
  15. ?
  16. ? ? ? ? @Override
  17. ? ? ? ? public void init(ServletConfig config) throws ServletException {
  18. ? ? ? ? String prefix = config.getServletContext().getRealPath("/");
  19. ? ? ? ? String file = config.getInitParameter("log4j");
  20. ? ? ? ? String filePath = prefix + file;
  21. ? ? ? ? Properties props = new Properties();
  22. ? ? ? ? try {
  23. ? ? ? ? ? ? FileInputStream istream = new FileInputStream(filePath);
  24. ? ? ? ? ? ? props.load(istream);
  25. ? ? ? ? ? ? istream.close();
  26. ?
  27. ? ? ? ? ? ? String logFile = prefix + props.getProperty("log4j.appender.FILE.File");//设置路径
  28. ? ? ? ? ? ? props.setProperty("log4j.appender.FILE.File",logFile);
  29. ? ? ? ? ? ?
  30. ? ? ? ? ? ? PropertyConfigurator.configure(props);//装入log4j配置信息
  31. ? ? ? ? ? ?
  32. ? ? ? ? ? ? Logger logger = Logger.getLogger(Log4jInitServlet.class.getName());? ? ?
  33. ? ? ? ? ? ?
  34. ? ? ? ? ? ? logger.info("创建日志文件:" + props.getProperty("log4j.appender.FILE.File"));
  35. ? ? ? ? ? ?
  36. ? ? ? ? } catch (IOException e) {
  37. ? ? ? ? ? ? toPrint("Could not read configuration file [" + filePath + "].");
  38. ? ? ? ? ? ? toPrint("Ignoring configuration file [" + filePath + "].");
  39. ? ? ? ? }
  40. ? ? ? ? }
  41. ? ? ? ?
  42. ? ? public static void toPrint(String content) {
  43. ? ? ? ? System.out.println(content);
  44. ? ? }
  45. ?
  46. }

配置web.xml

<servlet>
? ? <description>Log4j init Servlet</description>
? ? <display-name>Log4j init Servlet</display-name>
? ? <servlet-name>Log4jInitServlet</servlet-name>
? ? <servlet-class>bootcamp.common.servlet.Log4jInitServlet</servlet-class>
? ? <init-param>
? ? ? ? ? ?<param-name>log4j</param-name>
? ? ? ? ? ?<param-value>WEB-INF/classes/log4j.properties</param-value>
? ? </init-param>
? ? <load-on-startup>1</load-on-startup>
</servlet>

接着,在需要记录日志的类,先创建一个记录器变量

static Logger logger = Logger.getLogger(类名.class.getName());

?

如果不设成static,可以写作

Logger logger = Logger.getLogger(this.getClass().getName());

在记录时直接调用以下各种方法需要记录的信息即可。

logger.debug("调试信息.");
logger.info("一般信息.");
logger.warn("警告信息.");
logger.error("错误信息.");
logger.fatal("致命信息.");

※ 不过这种每天生成日志的方法,要从第二天开始才会按照log_yyyyMMdd.log的格式保存。

附录,完整的log4j.properties(使用控制台、数据库、文件保存日志),配解释:

  1. # level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
  2. log4j.rootLogger=DEBUG,CONSOLE,DATABASE,A1
  3. log4j.addivity.org.apache=true
  4. ?
  5. # 应用于控制台
  6. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
  7. # 本处设置为"INFO"以上级别在控制台输出(默认情况使用rootLogger中的设置)
  8. log4j.appender.CONSOLE.Threshold=INFO
  9. log4j.appender.CONSOLE.Target=System.out
  10. log4j.appender.CONSOLE.Encoding=GBK
  11. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  12. log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  13. ?
  14. # 用于数据库
  15. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
  16. log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
  17. log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
  18. log4j.appender.DATABASE.user=Nation
  19. log4j.appender.DATABASE.password=1
  20. # 本处设置为"WARN"以上级别在数据库存储(默认情况使用rootLogger中的设置)
  21. log4j.appender.DATABASE.Threshold=WARN
  22. log4j.appender.DATABASE.sql=INSERT INTO T_LOG4J(stamp,thread,infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
  23. # 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
  24. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
  25. log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
  26. ?
  27. # 每天新建日志
  28. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
  29. log4j.appender.A1.File=C:/log4j/website.log
  30. log4j.appender.A1.Encoding=GBK
  31. log4j.appender.A1.Threshold=DEBUG
  32. log4j.appender.A1.DatePattern='.'yyyy-MM-dd
  33. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  34. log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

log4j.rootLogger 的等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示