(一).首先配置好SSH jar包
(二).在web.xml中配置监听器:
<!-- 加载log4j配置文件 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log/log4j_config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
(三).定义日志log4j_config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "file:///D:\soft\log4j\log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="dailyFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="c:\\logs\\log.log"/>
<param name="Append" value="true"/>
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-6p%d{yyyy-MM-dd HH:mm}[%t]-%m%n"/>
</layout>
</appender>
<logger name="org.springframework">
<level value="INFO"/>
<appender-ref ref="dailyFile"/>
</logger>
<logger name="org.hibernate">
<level value="INFO"/>
<appender-ref ref="dailyFile"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
<appender-ref ref="dailyFile"/>
</logger>
<logger name="com.opensymphony">
<level value="INFO"/>
<appender-ref ref="dailyFile"/>
</logger>
<logger name="com.mchange">
<level value="INFO"/>
<appender-ref ref="dailyFile"/>
</logger>
<root>
<priority value="INFO"/>
<appender-ref ref="dailyFile"/>
</root>
</log4j:configuration>
(四).日志输出到C:\logs\log.log文件中
(五).有可能加载log4j.dtd文件
(六).配置logAdvice.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
<bean id="logAfter" class="com.newsicom.jxc.common.aop.log.LogAfterAdvice" />
<bean id="logBefore" class="com.newsicom.jxc.common.aop.log.LogBeforeAdvice" />
<bean id="logThrow" class="com.newsicom.jxc.common.aop.log.LogThrowAdvice" />
<aop:config>
<aop:pointcut id="serviceOperation-logAfter" expression="execution(* com.newsicom.jxc.basicinfo.goodsunits.service..*.*(..))" />
<aop:advisor pointcut-ref="serviceOperation-logAfter" advice-ref="logAfter" />
</aop:config>
<aop:config>
<aop:pointcut id="serviceOperation-logBefore" expression="execution(* com.newsicom.jxc.basicinfo.goodsunits.service..*.*(..))"/>
<aop:advisor pointcut-ref="serviceOperation-logBefore" advice-ref="logBefore" />
</aop:config>
<aop:config>
<aop:pointcut id="serviceOperation-logThrow" expression="execution(* com.newsicom.jxc.basicinfo.goodsunits.service..*.*(..))"/>
<aop:advisor pointcut-ref="serviceOperation-logThrow" advice-ref="logThrow" />
</aop:config>
</beans>
(七).编写Advice:
LogAfterAdvice
/**
* LogAfterAdvice
*/
package com.newsicom.jxc.common.aop.log;
import java.lang.reflect.Method;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.aop.AfterReturningAdvice;
public class LogAfterAdvice implements AfterReturningAdvice{
private static final Logger log=Logger.getLogger(LogAfterAdvice.class);
public void afterReturning(Object returnValue, Method method, Object[] args,
Object target) throws Throwable {
log.log(Level.INFO, target.getClass().getName()+"调用"+method.getName()+"结束,返回值:"+returnValue+"---");
}
}
LogBeforeAdvice:
package com.newsicom.jxc.common.aop.log;
import java.lang.reflect.Method;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice;
public class LogBeforeAdvice implements MethodBeforeAdvice {
private static final Logger log=Logger.getLogger(LogBeforeAdvice.class);
public void before(Method method, Object[] args, Object target)
throws Throwable {
log.log(Level.INFO, target.getClass().getName()+"调用"+method.getName()+"开始---");
}
}
LogThrowAdvice:
package com.newsicom.jxc.common.aop.log;
import java.lang.reflect.Method;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.aop.ThrowsAdvice;
import com.newsicom.jxc.common.util.GeneralUtil;
/**
* @author
*
*/
public class LogThrowAdvice implements ThrowsAdvice {
private static final Logger log = Logger.getLogger(LogThrowAdvice.class);
public void afterThrowing(Method method, Object[] args, Object target,
Throwable throwable) {
log.log(Level.ERROR,
target.getClass().getName() + "调用" + method.getName()
+ "时有异常抛出:" + GeneralUtil.getTrace(throwable) + "---");
}
}
(八).在applicationContext.xml中添加logAdvice.xml
<!-- Aop日志追踪 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<import resource="classpath:config/log/logAdvice.xml" />
(九).辅助类:
package com.newsicom.jxc.common.constant;
public final class CommonConstant {
public final static String EMPTY_STRING = "";
}
/*
* @(#)GeneralUtil.java 1.0.0 2011/06/15
*
* Copyright 2011 uniebiz.com. All rights reserved.
* UNIEBIZ PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.newsicom.jxc.common.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringEscapeUtils;
import com.newsicom.jxc.common.constant.CommonConstant;
import com.opensymphony.xwork2.ActionContext;
public class GeneralUtil {
public static final String createGuid() {
UUID uuid = UUID.randomUUID();
return uuid.toString().replaceAll("-", "");
}
public static final boolean strIsNullOrEmpty(String str) {
boolean isNullOrEmpty = (str == null || str
.equals(CommonConstant.EMPTY_STRING));
return isNullOrEmpty;
}
public static final String getCookieByName(HttpServletRequest request,
String name) {
String returnvalue = null;
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
returnvalue = cookie.getValue();
break;
}
}
}
return returnvalue;
}
public static final String dateFormat(String format, Date date) {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(date);
}
public static final String HTMLEncode(String str) {
return StringEscapeUtils.escapeHtml(str);
}
public static final String HTMLDecode(String str) {
return StringEscapeUtils.unescapeHtml(str);
}
public static String[] getDateStr(Calendar calendar) {
String tem[] = new String[5];
int mondayValue = calendar.get(Calendar.MONDAY) + 1;
String month = "0" + mondayValue;
tem[0] = calendar.get(Calendar.YEAR)
+ month.substring(month.length() - 2);
// 遍历四次 获得本月前四个月的字符串
for (int i = 1; i < 5; i++) {
calendar.add(Calendar.MONTH, -1);
mondayValue = calendar.get(Calendar.MONDAY) + 1;
month = "0" + mondayValue;
tem[i] = calendar.get(Calendar.YEAR)
+ month.substring(month.length() - 2);//
}
return tem;
}
/**
*
* 方法名:<code>getBetweenDate</code></br> 功能描述�?根据给定的Calendar
* 获得当前日期�?个月前的1�?�?0�?0�?0的日期放到日期数组中
*
* @param calendar
* 给定的Calender
* @return 日期 Date数组
*/
public static Date[] getBetweenDate(Calendar calendar) {
Date[] dateTem = new Date[2];
dateTem[0] = calendar.getTime();
calendar.add(Calendar.MONTH, -4);
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
dateTem[1] = calendar.getTime();
return dateTem;
}
/**
*
* 方法名:<code>getCycleDate</code></br>
* 功能描述:消费周�?
*
*
* @return 消费周期
*/
public static String getCycleDate() {
String strDate="";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
strDate =sdf.format(calendar.getTime());
calendar.set(Calendar.DAY_OF_MONTH,1);
strDate =sdf.format(calendar.getTime()) + " ~ " + strDate;
return strDate;
}
/**
*
* 方法名:<code>setLocaleLanguage</code></br>
* 功能描述�?
* 设置国际化语�?
*
* @param ac
* @param type
*/
public static void setLocaleLanguage(ActionContext ac, String type) {
Locale l = Locale.getDefault();
// 中文
if ("zh_CN".equals(type)) {
l = Locale.CHINESE;
} else if ("en_US".equals(type)) {
// 英文
l = Locale.US;
}
// 设置语言
ac.setLocale(l);
}
/**
*
* 方法名:<code>getTrace</code></br>
* 功能描述�?
* 获取异常堆栈信息�?
*
* @param t 抛出的异常�?
* @return 异常堆栈字符串�?
*/
public static String getTrace(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter writer = new PrintWriter(sw);
t.printStackTrace(writer);
StringBuffer buffer = sw.getBuffer();
return buffer.toString();
}
}
- 大小: 13.9 KB
分享到:
相关推荐
`log4j.properties`文件是整个日志配置的核心,包含日志级别设置、日志输出目的地等关键配置项。 ```properties log4j.rootLogger=INFO, logfile log4j.appender.logfile=org.apache.log4j....
同时,Log4j 提供的日志级别管理和动态配置能力,便于在开发、测试和生产环境中调整日志输出,确保在需要时获取足够的信息,而不会因为过多的日志输出影响性能。 **四、Log4j的主要组件** 1. **Logger**: 作为日志...
本篇文章将详细阐述如何在SSH环境中配置和使用Log4j,以及如何将日志输出到控制台和文件中。 首先,我们需要理解SSH框架中的每个组件与Log4j的关系。Spring作为应用的依赖注入容器,可以方便地整合其他库,包括Log4...
标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...
【SSH+Maven+Bootstrap视频教程】第18章主要讲解了如何测试并应用Log4j日志框架,这是Java开发中的一个关键组件,尤其在系统监控、调试和错误跟踪方面发挥着重要作用。Log4j是Apache软件基金会的一个开放源代码项目...
接下来,我们将深入探讨SSH的整合过程,事务管理以及Log4j的日志配置。 首先,**Struts1+Spring+Hibernate的整合过程**涉及到多个步骤。Struts作为MVC(模型-视图-控制器)框架,负责用户界面与后台逻辑的交互。...
在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志文件的一致性。以下是关于Log4j相对路径配置的详细说明: 首先,在`Web.xml`文件中...
在本节视频教程中,我们将深入探讨如何在Java项目中集成SSH(Struts、Spring、Hibernate)框架,并结合Maven构建工具以及Bootstrap前端框架,来添加和配置`log4j.properties`日志文件。这个过程对于任何Java开发人员...
SSH框架整合实战项目,log4j完整的配置文件(log4j.perproties,log4j.xml),日志可输出到控制台、本地文件、数据库,提供多种配置方法,项目可直接运行,SQL语句在项目中。该项目对学习spring,struts2,hibernate,log...
在IT行业中,SSH和Log4j是两个非常重要的概念,特别是在Java后端开发领域。SSH通常指的是Spring、Struts和Hibernate这三个开源框架的首字母缩写,它们是Java Web开发中的三大支柱,提供了模型-视图-控制器(MVC)...
1. **Spring集成Log4j**:Spring允许在配置文件中定义Log4j的日志级别和配置路径,通过Spring的ApplicationContext,可以获取到Log4j的日志对象,如`LoggerFactory.getLogger()`,方便在代码中记录日志。 2. **...
5. **Log4j配置**:学习如何配置log4j.properties文件,以定制日志输出。 6. **集成测试**:通过单元测试和集成测试来验证SSH框架的应用功能。 通过深入学习和实践,你将能够熟练运用SSH框架开发出高效、稳定的Java...
在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...
Log4j提供了丰富的配置选项,允许开发者定制日志级别、输出格式和目的地,使得在项目运行过程中可以方便地收集和分析信息。 在实际搭建SSH框架时,我们需要将这些jar文件添加到项目的类路径中。对于Struts2和Spring...
SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中常用的日志处理框架,它们在构建SSH(Struts、Spring、Hibernate)和MVC(Model-View-Controller)架构的Web应用程序时扮演着至关重要的角色。...
2. **配置Log4j**:在项目中创建log4j.properties或log4j.xml配置文件,设置日志级别、输出格式、目的地等,确保SLF4J可以通过Log4j进行日志记录。 3. **配置CXF**:在CXF的配置文件(如cxf.xml)中设置服务端点、...
在SSH3项目中配置SLF4J,主要是为了实现灵活的日志记录,以便于调试和问题追踪。 首先,我们来看SLF4J的工作原理。SLF4J并不实际进行日志输出,而是作为一个接口,允许开发者选择任何支持SLF4J的日志实现,如...
总结来说,Log4j提供了一套强大且灵活的日志管理工具,通过配置Logger、日志级别和Appender,开发者可以轻松地控制日志的生成、级别和输出位置,从而更好地监控和诊断应用程序。理解并熟练运用Log4j,对于提升开发...
在本资源中,我们主要关注Spring框架的配置文件——`applicationContext.xml`和日志配置文件——`log4j.properties`。 `applicationContext.xml`是Spring框架的核心配置文件,它定义了Bean的声明、依赖注入(DI)、...
标题中的"SSH2+log4j源码"指的是在Java开发中常用的三个开源框架——Spring、Struts2和Hibernate的源代码,以及日志记录工具log4j的源码。这些框架是Java企业级应用开发的核心组件,对于理解Java Web应用的运行机制...