• 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 来配置该文件的绝对路径就可以了

  • 相关阅读:
    SpringBoot项目启动报错main ERROR appenders Appenders has no parameter that matches element Loggers main WARN No Loggers were configured, using default. Is the Loggers element missing?
    linux 查看用户列表命令
    Docker安装ES、Kibana、head、IK
    openssl test TLS connect to K8S
    IBM MQ 修改ssl cipher
    可视化vscode使用Plotly,绘制直方图
    可视化vscode安装pandas
    VUE(试水篇)
    MongoDB
    Docker 详细
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5539346.html
Copyright © 2020-2023  润新知