• log4j配置webapp日志系统


    1.基础知识: 
    Log4j的中文文档 (这是根据最新的log4j(jakarta-log4j-1.2.8)的开发包自带文档的manual翻译的) 
    http://dev.csdn.net/develop/article/29/29441.shtm
    对应的英文原文: 
    Short introduction to log4j 
    http://logging.apache.org/log4j/docs/manual.html

    2.步骤 
    1)log4j.jar放到jsp-examplesWEB-INFlib下; 
    2)在jsp-examples下新建propertieslog4j.properties; 
    3)log4j.properties内容: 
    #log4j.properties

    log4j.rootLogger=info, A1

    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.A1.file=${webappHome}/logs/tomcat_log_ 
    log4j.appender.A1.DatePattern=yyyy-MM-dd'.html' 
    log4j.appender.A1.layout=org.apache.log4j.HTMLLayout

    4)“F:UserWorkSpacejiangcmTomcat 5.0webappsjsp-examples”新建上述属性文件所设置的存放

    日志文件的logs文件夹; 
    注释: 
    tomcat_log_是文件名,可以不用预先新建该文件;如果预先建了,则日志文件直接为tomcat_log_2007-

    03-05.html格式,如果之前无该文件,在第一次生成的日志文件名称为tomcat_log_;

    5)进入目录“F:UserWorkSpacejiangcmTomcat 5.0webappsjsp-examplesWEB-INFclasses”,新

    建“log4jLog4JInit.java”;

    6)Log4JInit.java内容: 
    package log4j; 
    import java.io.*; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import org.apache.log4j.*;

    public class Log4JInit extends HttpServlet {

    public void init() throws ServletException { 
    String prefix = getServletContext().getRealPath("/"); 
    String test = getServletContext().getRealPath(""); 
    System.out.println(prefix); 
    System.out.println(test); 
    System.setProperty("webappHome", test); 
    String file = getServletConfig().getInitParameter("log4j-config-file"); 
    System.out.println(prefix+file); 
    // 从Servlet参数读取log4j的配置文件 
    if (file != null) { 
    PropertyConfigurator.configure(prefix + file); 
    }


    public void doGet(HttpServletRequest request,HttpServletResponse response)throws 
    IOException, ServletException {}

    public void doPost(HttpServletRequest request,HttpServletResponse response)throws 
    IOException, ServletException {}

    }

    注意: 
    “System.setProperty("webappHome", test);”这行代码要出现在“PropertyConfigurator.configure

    (prefix + file);”这行代码之前;因为这样才给"webappHome"设置值了,log4j.properties文件中的“

    log4j.appender.A1.file=${webappHome}/logs/tomcat_log_”中的“${webappHome}”这个环境变量才被

    赋值了,否则无法输出日志文件;

    7)设置“jsp-examplesWEB-INFweb.xml”,使上述Log4JInit.java这个servlet自动启动,在web.xml

    中添加: 
    <servlet> 
    <servlet-name>log4jinit</servlet-name> 
    <servlet-class>log4j.Log4JInit</servlet-class> 
    <init-param> 
    <param-name> log4j-config-file </param-name> 
    <param-value>/properties/log4j.properties</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet>

    注意:上面的load-on-startup应设为1,以便在Web容器启动时即装入该Servlet。log4j.properties文件

    放在根的properties子目录中,也可以把它放在其它目录中。应该把.properties文件集中存放,这样方

    便管理。

    8)在webapp中使用log4j;进入目录“F:UserWorkSpacejiangcmTomcat 5.0webappsjsp-

    examplesWEB-INFclassesdates”,修改JspCalendar.java,加上日志信息: 
    //JspCalendar.java 
    package dates;

    import java.text.DateFormat; 
    import java.util.*; 
    import org.apache.log4j.Logger; 
    import org.apache.log4j.Level; 
    import org.apache.log4j.*;

    public class JspCalendar { 
    Calendar calendar = null; 
    static Logger logger = Logger.getLogger(JspCalendar.class);

    public JspCalendar() { 
    logger.debug("This is debug."); 
    logger.info("This is an info."); 
    logger.warn("This is a warning."); 
    logger.error("This is an error."); 
    logger.fatal("This is a fatal error.");

    calendar = Calendar.getInstance(); 
    Date trialTime = new Date(); 
    calendar.setTime(trialTime); 
    }

    public int getYear() {

    return calendar.get(Calendar.YEAR);

    }

    …… 
    //其他内容不变;

    }

    9)修改系统日期,这样才能手工触发按日生成的日志;

    10)重启tomcat;

    11)在IE中输入“http://localhost:8086/jsp-examples/dates/date.jsp”;

    12)查看日志目录“F:UserWorkSpacejiangcmTomcat 5.0webappsjsp-exampleslogs”,耶!生成

    以日期命名的html日志文件tomcat_log_2007-03-05.html了!哈哈,太开心了!

    注释: 
    1.tomcat本身也会自动按日生成日志文件,在目录“F:UserWorkSpacejiangcmTomcat 5.0logs”下; 
    2.jdk如果无法编译servlet,需要在tomcatcommonlib下把servlet-api.jar拷贝到jdkjrelib下; 
    问题: 
    1.把tomcat_log_2007-03-05.html文件名改为:jsp-examples_log_2007-03-05.html; 
    2.xml配置方式有待实践和学习; 
    参考资料: 
    1.http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184

    2.http://wangluwww.spaces.live.com/blog/

    3.Log4j的中文文档 (这是根据最新的log4j(jakarta-log4j-1.2.8)的开发包自带文档的manual翻译的) 
    http://dev.csdn.net/develop/article/29/29441.shtm

    4.http://www.javaeye.com/post/126014 
    怕麻烦的话可以考虑放应用下的某一个目录下,整个Servlet,专门用来设置环境变量和读取log4j的配置

    文件 ,初始化Servlet的时候,应用程序的目录是固定的 
    可以通过System.setProperty("webappHome",this.getServletContext().getRealPath(""));来设置当前

    应用的目录的绝对路径为java内部的环境变量,在log4j的配置文件里面用${webappHome}/WEB-

    INF/conf/log/Application.log 来配置该文件的绝对路径就可以了

  • 相关阅读:
    Linux ansible的group模块
    ansible copy 模块详解
    Linux centos yum仓库 自制
    ansible 的playbook脚本
    Linux centos 监控备份
    Linux centos nginx下载安装初步
    周总结5
    周总结4
    爬取
    结对开发
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5539346.html
Copyright © 2020-2023  润新知