`

关于log4j在SSH中输出日志的配置

 
阅读更多
 

(一).首先配置好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
分享到:
评论

相关推荐

    SSH框架中配置log4j的方法

    `log4j.properties`文件是整个日志配置的核心,包含日志级别设置、日志输出目的地等关键配置项。 ```properties log4j.rootLogger=INFO, logfile log4j.appender.logfile=org.apache.log4j....

    log4j在ssh架构下的配置使用.docx

    同时,Log4j 提供的日志级别管理和动态配置能力,便于在开发、测试和生产环境中调整日志输出,确保在需要时获取足够的信息,而不会因为过多的日志输出影响性能。 **四、Log4j的主要组件** 1. **Logger**: 作为日志...

    ssh中log4j的使用

    本篇文章将详细阐述如何在SSH环境中配置和使用Log4j,以及如何将日志输出到控制台和文件中。 首先,我们需要理解SSH框架中的每个组件与Log4j的关系。Spring作为应用的依赖注入容器,可以方便地整合其他库,包括Log4...

    ssh+aop+log4j+日志拦截器+注解

    标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...

    [SSH+Maven+Bootstrap视频教程]_18. 测试 log4j 日志框架.zip

    【SSH+Maven+Bootstrap视频教程】第18章主要讲解了如何测试并应用Log4j日志框架,这是Java开发中的一个关键组件,尤其在系统监控、调试和错误跟踪方面发挥着重要作用。Log4j是Apache软件基金会的一个开放源代码项目...

    SSH的配置、事务管理和Log4j的配置

    接下来,我们将深入探讨SSH的整合过程,事务管理以及Log4j的日志配置。 首先,**Struts1+Spring+Hibernate的整合过程**涉及到多个步骤。Struts作为MVC(模型-视图-控制器)框架,负责用户界面与后台逻辑的交互。...

    Log4j 相对路径配置

    在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志文件的一致性。以下是关于Log4j相对路径配置的详细说明: 首先,在`Web.xml`文件中...

    [SSH+Maven+Bootstrap视频教程]_17. 添加 log4j.properties 配置文件.zip

    在本节视频教程中,我们将深入探讨如何在Java项目中集成SSH(Struts、Spring、Hibernate)框架,并结合Maven构建工具以及Bootstrap前端框架,来添加和配置`log4j.properties`日志文件。这个过程对于任何Java开发人员...

    ssh ,log4j实例

    SSH框架整合实战项目,log4j完整的配置文件(log4j.perproties,log4j.xml),日志可输出到控制台、本地文件、数据库,提供多种配置方法,项目可直接运行,SQL语句在项目中。该项目对学习spring,struts2,hibernate,log...

    写的ssh+log4j的Simple

    在IT行业中,SSH和Log4j是两个非常重要的概念,特别是在Java后端开发领域。SSH通常指的是Spring、Struts和Hibernate这三个开源框架的首字母缩写,它们是Java Web开发中的三大支柱,提供了模型-视图-控制器(MVC)...

    ssh结合log4j例子

    1. **Spring集成Log4j**:Spring允许在配置文件中定义Log4j的日志级别和配置路径,通过Spring的ApplicationContext,可以获取到Log4j的日志对象,如`LoggerFactory.getLogger()`,方便在代码中记录日志。 2. **...

    SSH框架初学者入【包含log4j及jar】

    5. **Log4j配置**:学习如何配置log4j.properties文件,以定制日志输出。 6. **集成测试**:通过单元测试和集成测试来验证SSH框架的应用功能。 通过深入学习和实践,你将能够熟练运用SSH框架开发出高效、稳定的Java...

    spring 配置log4j.docx

    在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...

    搭建SSH框架需要引入的Struts2包(log4j,spring-web,struts2-spring-plugin)

    Log4j提供了丰富的配置选项,允许开发者定制日志级别、输出格式和目的地,使得在项目运行过程中可以方便地收集和分析信息。 在实际搭建SSH框架时,我们需要将这些jar文件添加到项目的类路径中。对于Struts2和Spring...

    slf4j-log4j12-1.6.1.jar+slf4j-api-1.6.1.jar

    SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中常用的日志处理框架,它们在构建SSH(Struts、Spring、Hibernate)和MVC(Model-View-Controller)架构的Web应用程序时扮演着至关重要的角色。...

    slf4j-all-log4j12-1.4.3.jar.zip CXF整合SSH你可能需要它

    2. **配置Log4j**:在项目中创建log4j.properties或log4j.xml配置文件,设置日志级别、输出格式、目的地等,确保SLF4J可以通过Log4j进行日志记录。 3. **配置CXF**:在CXF的配置文件(如cxf.xml)中设置服务端点、...

    有关在ssh3中slf的配置

    在SSH3项目中配置SLF4J,主要是为了实现灵活的日志记录,以便于调试和问题追踪。 首先,我们来看SLF4J的工作原理。SLF4J并不实际进行日志输出,而是作为一个接口,允许开发者选择任何支持SLF4J的日志实现,如...

    log4j的学习笔记

    总结来说,Log4j提供了一套强大且灵活的日志管理工具,通过配置Logger、日志级别和Appender,开发者可以轻松地控制日志的生成、级别和输出位置,从而更好地监控和诊断应用程序。理解并熟练运用Log4j,对于提升开发...

    SSH框架整合中spring框架所需要的配置文件

    在本资源中,我们主要关注Spring框架的配置文件——`applicationContext.xml`和日志配置文件——`log4j.properties`。 `applicationContext.xml`是Spring框架的核心配置文件,它定义了Bean的声明、依赖注入(DI)、...

    SSH2+log4j源码

    标题中的"SSH2+log4j源码"指的是在Java开发中常用的三个开源框架——Spring、Struts2和Hibernate的源代码,以及日志记录工具log4j的源码。这些框架是Java企业级应用开发的核心组件,对于理解Java Web应用的运行机制...

Global site tag (gtag.js) - Google Analytics