zoukankan      html  css  js  c++  java
  • Spring学习8-SSH+Log4j黄金整合

    最下面有log4j的详解及配置步骤
    步骤一、导入相应的jar包(具体参看下一篇博文)


    步骤二、修改WEB.XML文件,内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0“>
        <!– 欢迎页面-->
        <welcome-file-list>
            <welcome-file>test.jsp</welcome-file>
        </welcome-file-list>
        <!-- WebApp Root -->
        <context-param>
            <param-name>webAppRootKey</param-name>
            <param-value>SSH</param-value>
        </context-param>

        <!-- Spring Encoding Filter -->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>
                org.springframework.web.filter.CharacterEncodingFilter
                    </filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
    <!-- Spring Encoding Filter Mapping -->
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Struts2 Filter -->
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <!-- Struts2 Filter Mapping -->
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- Log4j 日志系统本地信息的配置 -->
        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:log4j.properties</param-value>
        </context-param>
        <!-- Spring Log4j Listener -->
        <listener>
            <listener-class>
                org.springframework.web.util.Log4jConfigListener
            </listener-class>
        </listener>
    <!-- Spring 配置文件的本地路径 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>

    <!-- 此位置相对于:部署后的项目的类路径 。多个文件逗号分隔-->
             <param-value>classpath:applicationContext.xml</param-value>

    <!-- 此位置相对于:部署后的项目的类路径 。多个文件逗号分隔    
    <param-value>/WEB-INF/applicationContext.xml</param-value>-->
    </context-param>
        <!– Spring配置信息加载监听器 Context Listener -->
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
        <!-- Spring Web Request Listener -->
        <listener>
            <listener-class>
                org.springframework.web.context.request.RequestContextListener
            </listener-class>
        </listener>
        <!-- Spring 防止内存溢出Introspector Cleanup Listener -->
        <listener>
            <listener-class>
                org.springframework.web.util.IntrospectorCleanupListener
            </listener-class>
        </listener>
    </web-app>


    第三步:添加LOG4J的配置文件(Log4j配置文件名:log4j.properties,内容:)L
    og4j的官网下载log4组件,官网地址http://logging.apache.org/log4j/
       # Set The RootLogger,设置日志系统消息输出的优先级(从高到低:ERROR、WARN、INFO、DEBUG)
    log4j.rootLogger=debug,console,html,txt
    # Direct Log Messages To Console
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target=System.out
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L - %m%n
    #html也可以使用相对路径:
    ${SSH}/logs/app.log (其中SSH是上面配置的web root)
    log4j.appender.html=org.apache.log4j.RollingFileAppender
    log4j.appender.html.File=c:/log.html
    log4j.appender.html.MaxFileSize=900KB
    log4j.appender.html.MaxBackupIndex=1
    log4j.appender.html.layout=org.apache.log4j.HTMLLayout
    log4j.appender.html.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
    #u6587u672cu6587u4ef6u8f93u51fau6e90
    log4j.appender.txt=org.apache.log4j.RollingFileAppender
    log4j.appender.txt.File=c:/log.txt
    log4j.appender.txt.MaxFileSize=500KB
    log4j.appender.txt.MaxBackupIndex=1
    log4j.appender.txt.layout=org.apache.log4j.PatternLayout
    log4j.appender.txt.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

    # org.hibernate类在不小于debug模式下回输出日志
    log4j.logger.org.hibernate=debug
    #
    org.hibernate.SQL类在不小于debug模式下回输出日志
    log4j.logger.org.hibernate.SQL=debug

    # Log Schema Export Update
    log4j.logger.org.hibernate.tool.hbm2ddl=debug

    大体步骤已经完成

    ##########################################################################################################################################
    接下来介绍log4j的一些基础知识:
     一.Log4j的优点
        Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送地;我们也可以控制每一条日志的输出格式;通过定义每一条 日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

     二、使用log4j的步骤
       1、导入log4.jar包到类路径下(web项目导入到WebRootWEB-INFlib下)
       2、定义配置文件log4j.properties
         Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:
        Log4j由三个重要的组件构成:日志信息的优先级(即配置根日志记录器),日志信息的输出目的地类型,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,分别用来指定这条日志信息的重要程度;日志信息的输出目的地类型指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

        1)配置根日志记录器(log4j.rootLogger)
       根记录器中包含了两部分内容:日志信息的优先级和输出目类型的地别名。
    格式如下:
       log4j.rootLogger = [ level ] , appenderName1, appenderName2
     说明:Log4j建议只使用四个级别,DEBUG<INFO<WARN<ERROR<FATAL如果一条日志消息的级别大于等于配置文件的级别,就会有日志记录,在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关;其中appenderName1,
    appenderName2是输出目的地别名,可以自定义的
        2)配置输出目的地类型(总的来说有:控制台和文件)
         格式:  log4j.appender.
    appenderName1 = appender类型
    log4j常用的集中appender类型:
    org.apache.log4j.ConsoleAppender(控制台)
    org.apache.log4j.FileAppender(文件)
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    org.apache.log4j.net.SMTPAppender(邮件发送日志)
    org.apache.log4j.jdbc.JDBCAppender  输出到数据库


       说明:如果输出到文件,则要指定文件位置及文件名:
           log4j.appender.appenderName1.file = 文件位置/文件名
    如果使用
    DailyRollingFileAppender类型,可以进行时间配置:
        如:log4j.appender.FILE.DatePattern='.'yyyy-MM-dd

    DailyRollingFileAppender

    的时间配置
    ''.''yyyy-MM: 每月 
    ''.''yyyy-ww: 每周  
    ''.''yyyy-MM-dd: 每天 
    ''.''yyyy-MM-dd-a: 每天两次 
    ''.''yyyy-MM-dd-HH: 每小时 
    ''.''yyyy-MM-dd-HH-mm: 每分钟

       3)配置输出格式
        格式: log4j.appender.appenderName1.layout = 布局类
    log4j常用的layout:
    org.apache.log4j.HTMLLayout(以 HTML 表格形式布局)
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


    当使用org.apache.log4j.PatternLayout来自定义信息格式时,可以使用
    log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 来格式化信息.

    org.apache.log4j.PatternLayout的ConversionPattern说明:
    -X: X 信息输出时左对齐; 
    %p: 输出日志信息优先级,即 DEBUG,INFO,WARN,ERROR,FATAL, 
    %d: 输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式, 比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002 年 10 月 18 日 22:10:28,921 
    %r: 输出自应用启动到输出该 log 信息耗费的毫秒数 
    %c: 输出日志信息所属的类目,通常就是所在类的全名,
    可写为 %c{Num} ,Num类名输出的范围 如:"com.sun.aaa.classB", %C{2}将使日志输出输出范围为:aaa.classB 
    %t: 输出产生该日志事件的线程名 
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及行数.举例:Testlog4.main(TestLog4.java:10) 
    %x: 输出和当前线程相关联的 NDC(嵌套诊断环境),尤其用到像 java servlets 这样的多客户多线程的应用中。 
    %%: 输出一个"%"字符 
    %F: 输出日志消息产生时所在的文件名称 
    %L: 输出代码中的行号 
    %m: 输出代码中指定的消息,
    如info(“message”),输出message 
    %n: 输出一个回车换行符,Windows 平台为" ",Unix 平台为" "输出日志信息换行

      3、加载配置文件log4j.properties并输出
       1)一般web项目可以这样手动输出:
     String path = getServletContext().getRealPath("/")+"WEB-INF\classes\log4j.properties";     //得到log4j.properties的绝对路径

        PropertyConfigurator.configure(path);      //读取配置文件
        Logger log = Logger.getRootLogger();
        log.warn("输出日志消息");   
    //此处的日志级别(warn)要大于等于在配置文件中配置的日志级别
      
       2)如果与spring框架整合的话,只需在WEB.XML添加如下内容:
      <!-- Log4j 日志系统本地信息的配置 -->
        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:log4j.properties</param-value>
        </context-param>
        <!-- Spring Log4j Listener -->
        <listener>
            <listener-class>
                org.springframework.web.util.Log4jConfigListener
            </listener-class>
        </listener>


    ---------------------------------------------------------------------
                   log4j.properties示例文件
    ---------------------------------------------------------------------

    log4j.rootLogger=INFO,console,rollfile

    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Threshold=DEBUG
    log4j.appender.console.ImmediateFlush=true
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

    log4j.appender.rollfile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.rollfile.Threshold=DEBUG
    log4j.appender.rollfile.ImmediateFlush=true
    log4j.appender.rollfile.Append=true
    log4j.appender.rollfile.File=c:/logs/dfhrWebpay.log
    log4j.appender.rollfile.DatePattern='.'yyyy-MM-dd
    log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.rollfile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

    #log4j.logger.com.opensymphony=DEBUG
    #log4j.logger.org.apache=ERROR
    #log4j.logger.org.springframework=DEBUG
    #log4j.logger.org.acegisecurity=DEBUG
    #log4j.logger.service=DEBUGe
    log4j.logger.com.ibatis = DEBUG
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG 
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG 
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG 
    log4j.logger.java.sql.Connection = DEBUG
    log4j.logger.java.sql.Statement = DEBUG
    log4j.logger.java.sql.PreparedStatement = DEBUG
    log4j.logger.java.sql.ResultSet = DEBUG
    ---------------------------------------------------------------------
                            log4j.xml示例文件
    --------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration>
       
        <!--控制台log-->
        <appender name="console.log" class="org.apache.log4j.ConsoleAppender">
            <param name="ImmediateFlush" value="true"/><!--所有消息被立即输出-->
            <layout class="org.apache.log4j.TTCCLayout"></layout><!--设置log4j消息格式化-->
        </appender>
       
        <!--文件log-->
        <appender name="file.log" class="org.apache.log4j.FileAppender">
            <param name="File" value="c:/file.log"/><!--指定写入的文件-->
            <param name="Append" value="true"/><!--默认值是 true,即将消息增加到指定文件中,false 指将消息覆盖指定的文件内容-->
            <param name="ImmediateFlush" value="true"/><!--所有消息被立即输出-->
            <param name="Threshold" value="info"/><!--指定日志消息的输出最低层次-->
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%p %d{yyyy-MM-dd HH:mm:ss} %C[%L]| %m%n"/>
            </layout>
        </appender>
       
        <!--时间间隔log-->
        <appender name="daily.log" class="org.apache.log4j.DailyRollingFileAppender">
            <param name="File" value="c:/daily.log"/><!--指定写入的文件-->
            <param name="Append" value="true"/><!--默认值是 true,即将消息增加到指定文件中,false 指将消息覆盖指定的文件内容-->
            <param name="ImmediateFlush" value="true"/><!--所有消息被立即输出-->
            <param name="Threshold" value="info"/><!--指定日志消息的输出最低层次-->
            <param name="DatePattern" value="'.'yyyy-MM-dd"/>
            <layout class="org.apache.log4j.TTCCLayout"></layout>
        </appender>
       
        <!--文件大小log-->
        <appender name="roll.log" class="org.apache.log4j.RollingFileAppender">
            <param name="File" value="c:/roll.log"/><!--指定写入的文件-->
            <param name="Append" value="true"/><!--默认值是 true,即将消息增加到指定文件中,false 指将消息覆盖指定的文件内容-->
            <param name="ImmediateFlush" value="true"/><!--所有消息被立即输出-->
            <param name="Threshold" value="info"/><!--指定日志消息的输出最低层次-->
            <param name="MaxFileSize" value="5KB"/><!--指定单个文件大小,单位可以是KB,MB,GB当日志打到当前大小时将自动滚动-->
            <param name="MaxBackupIndex" value="2"/><!--指定产生滚动文件的最大数-->
            <layout class="org.apache.log4j.TTCCLayout"></layout>
        </appender>
       
        <!--邮件log-->
        <appender name="mail.log" class="org.apache.log4j.net.SMTPAppender">
            <param name="Threshold" value="info"/><!--指定日志消息的输出最低层次-->
            <param name="BufferSize" value="10"/>
            <param name="From" value="qiaoyu_yu@huateng.com"/>
            <param name="SMTPHost" value="mail.huateng.com"/>
            <param name="subject" value="Log4j Message"/>
            <param name="To" value="endlesshb@163.com"/>
            <layout class="org.apache.log4j.TTCCLayout"></layout>
        </appender>
       
        <logger name="console">
            <appender-ref ref="console.log"/>
        </logger>
       
        <logger name="file">
            <appender-ref ref="file.log"/>
        </logger>
       
        <logger name="daily">
            <appender-ref ref="daily.log"/>
        </logger>
       
        <logger name="roll">
            <appender-ref ref="roll.log"/>
        </logger>
       
        <logger name="mail">
            <appender-ref ref="mail.log"/>
        </logger>
       
    </log4j:configuration>
  • 相关阅读:
    在Apache下开启SSI配置支持include shtml html和快速配置服务器
    GitHub命令精简教程
    php读取excel,以及php打包文件夹为zip文件
    Firebug中命令行栏(Commandlinie)的使用介绍和总结
    javascript判断设备类型-手机(mobile)、安卓(android)、电脑(pc)、其他(ipad/iPod/Windows)等
    jquery返回顶部-ie6配合css表达式。
    jquery.cycle.js简单用法实例
    原生javascript操作class-元素查找-元素是否存在-添加class-移除class
    常用css表达式-最小宽度-上下居中
    div模块变灰
  • 原文地址:https://www.cnblogs.com/kabi/p/5182075.html
Copyright © 2011-2022 走看看