最下面有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,内容:)Log4j的官网下载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
#\u6587\u672c\u6587\u4ef6\u8f93\u51fa\u6e90
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项目导入到WebRoot\WEB-INF\lib下)
  
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 平台为"\r\n",Unix 平台为"\n"输出日志信息换行

  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>

Spring学习8-SSH+Log4j黄金整合的更多相关文章

  1. Spring学习笔记(六)—— SSH整合

    一.整合原理 二.整合步骤 2.1 导包 [hibernate] hibernate/lib/required hibernate/lib/jpa 数据库驱动 [struts2] struts-bla ...

  2. Spring学习笔记四 整合SSH

    三大框架架构(整合原理) 步骤1:导包 Hibernate包 1.Hibernate包,hibernate/lib/required 2.hibernate/lib/jpa | java persis ...

  3. Spring框架的第四天(整合ssh框架)

    ## Spring框架的第四天 ## ---------- **课程回顾:Spring框架第三天** 1. AOP注解方式 * 编写切面类(包含通知和切入点) * 开启自动代理 2. JDBC模板技术 ...

  4. 【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合

    前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybati ...

  5. Strut、Spring、Hibernate如何实现资源整合(SSH)呢?

    Strut.Spring.Hibernate如何实现资源整合(SSH)呢? 其实很简单,我们从Spring与Hibernate的整合中可以看出来,由Spring的配置文件来管理Hiberbate的配置 ...

  6. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  7. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  8. jackson学习之九:springboot整合(配置文件)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章汇总 jackson学习之一:基本信息 jac ...

  9. Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码)

    Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码) 备注: 之前在Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合中 ...

随机推荐

  1. Java 操作 Redis 高级

    /Users/sherry/WorkPath/Git/Web/redisDemo/src/main/java/org/zln/utils/JedisUtils.java package org.zln ...

  2. [资料]常用Windows CMD指令

    1. 查找80端口开放情况 netstat -aon|findstr “80″ 2. 用netstat查询端口占用程序的PID,显示列表的最后一列就是占用程序的PID,然后再利用tasklist找到这 ...

  3. Linux 网络编程八(epoll应用--大并发处理)

    //头文件 pub.h #ifndef _vsucess #define _vsucess #ifdef __cplusplus extern "C" { #endif //服务器 ...

  4. char 转wchar_t 及wchar_t转char

    利用WideCharToMultiByte函数来转换,该函数映射一个unicode字符串到一个多字节字符串.通常适合于window平台上使用. #include <tchar.h> #in ...

  5. Django基础 - Debug设置为False后静态文件获取404

    当设置setting.py文件当中的DEBUG=FALSE后,Django会默认使用Web Server的静态文件处理,故若没设置好Web Server对静态文件的处理的话,会出现访问静态文件404的 ...

  6. Qt——信号槽连接:基于字符串与基于函数的连接之间的不同

    从Qt5.0开始,Qt提供了两种不同的方式进行信号槽的连接:基于 字符串 的连接语法.基于 函数 的连接语法.这两种语法各有利弊,下面对它们的不同点进行总结. 以下几部分详细解释了它们之间的不同,并说 ...

  7. 基于EventAggregator的事件发布及订阅

    EventAggregator简介 EventAggregator是Prism中专门处理ViewModel与ViewModel之间事件传递的类对象,它提供了针对事件的发布方法和订阅方法,所以可以非常方 ...

  8. 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计

    这一章讲了MPI非阻塞通信的原理和一些函数接口,最后再用非阻塞通信方式实现Jacobi迭代,记录学习中的一些知识. (1)阻塞通信与非阻塞通信 阻塞通信调用时,整个程序只能执行通信相关的内容,而无法执 ...

  9. 简单的音乐播放器(VS 2010 + Qt 4.8.5)

    昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...

  10. IE10访问apache 2.4会奇慢的解决办法

    Windows版的apache 2.4. IE10访问apache 2.4会特别慢.有时Apache挂起了.只好重新开apache,但是重开后,也会好景不长,刚处理几个请求,就又变得奇慢了.Firef ...