`

Spring在项目中记录日志

阅读更多
你可以根据自己的需求自定义,需要记录那些,该例子,只对增删改做记录 。

public class OperationLog {

	private String id;
	
	private Date operateTime;
	
	private String operator;
	
	private String ipAddress;
	
	private String module;
	
	private String node;
	
	private String type;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Date getOperateTime() {
		return operateTime;
	}

	public void setOperateTime(Date operateTime) {
		this.operateTime = operateTime;
	}

	public String getOperator() {
		return operator;
	}

	public void setOperator(String operator) {
		this.operator = operator;
	}

	public String getIpAddress() {
		return ipAddress;
	}

	public void setIpAddress(String ipAddress) {
		this.ipAddress = ipAddress;
	}

	public String getModule() {
		return module;
	}

	public void setModule(String module) {
		this.module = module;
	}

	public String getNode() {
		return node;
	}

	public void setNode(String node) {
		this.node = node;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	
	
}
 
//这个类就是AOP中的A,Aspect
//将横切性关注点模块化(分离出来),分离出来的这个类就是Aspect
public class OperationLogHandler {
	
//	private Map<String, String> moduleMap = new HashMap<String, String>();
//	{
//		moduleMap.put("/org", "机构维护");
//		moduleMap.put("/emp", "员工维护");
//		moduleMap.put("/permisssion", "许可维护");
//		moduleMap.put("/role", "角色维护");
//	}
 
	private Map<String, String> moduleMap;
	
	private OperationLogService operationLogService;
	
	public void setModuleMap(Map<String, String> moduleMap) {
		this.moduleMap = moduleMap;
	}

	public void setOperationLogService(OperationLogService operationLogService) {
		this.operationLogService = operationLogService;
	}

	//这个方法就是AOP中的Advice,横切性关注点的具体实现
	//JoinPoint称为连接点,Advice执行的时机(或执行的地方)
	public void handle(JoinPoint joinPoint) {
		//System.out.println("saveOperationLog");
		OperationLog operationLog = new OperationLog();
		operationLog.setOperateTime(new Date());
		
        String sessionId = ServletActionContext.getRequest().getParameter("sessionId");
        // 根据sessionid获取session
        MySessionContext myc = MySessionContext.getInstance();
        HttpSession sess = myc.getSession(sessionId);
		
//		User user = (User)ServletActionContext.getRequest().getSession().getAttribute("USER");
		operationLog.setOperator((String) sess.getAttribute("USER"));
		operationLog.setIpAddress(ServletActionContext.getRequest().getRemoteAddr());
		String namespace = ServletActionContext.getActionMapping().getNamespace();
		operationLog.setModule(moduleMap.get(namespace));
		String node = joinPoint.getTarget().getClass().getName() + "-->" + joinPoint.getSignature().getName(); 
		operationLog.setNode(node);
		if (joinPoint.getSignature().getName().startsWith("save")) {
			operationLog.setType("保存");
		}else if (joinPoint.getSignature().getName().startsWith("update")) {
			operationLog.setType("更新");
		}else {
			operationLog.setType("删除");
		}
		operationLogService.save(operationLog);
	}

}
 
public interface OperationLogService {

	public void save(OperationLog operationLog);
}
 
public class OperationLogServiceImpl implements OperationLogService {

	private OperationLogDao operationLogDao;
	
	public void setOperationLogDao(OperationLogDao operationLogDao) {
		this.operationLogDao = operationLogDao;
	}

	@Override
	public void save(OperationLog operationLog) {
		operationLogDao.save(operationLog);
	}
}
 
public interface OperationLogDao {

	public void save(OperationLog operationLog);
}
 
public class OperationLogDaoImpl extends HibernateDaoSupport implements OperationLogDao {

    /**
     * @param operationLog
     * @see com.acca.dao.OperationLogDao#save(com.acca.entity.OperationLog)
     */
    @Override
    public void save(OperationLog operationLog) {
        getHibernateTemplate().save(operationLog);
        
    }
}
 
<bean id="operationLogService" class="com.acca.service.impl.OperationLogServiceImpl">
 <property name="operationLogDao" ref="operationLogDao"></property>
</bean>
	<bean id="operationLogHandler" class="com.acca.service.impl.OperationLogHandler">
		<property name="moduleMap">
			<map>
			    <entry key="/" value="数据导入"/>
				<entry key="/org" value="机构维护"/>
				<entry key="/emp" value="员工维护"/>
				<entry key="/permission" value="许可维护"/>
				<entry key="/role" value="角色维护"/>
				<entry key="/user" value="用户维护"/>
				<entry key="/announcement" value="公告管理"/>
			</map>
		</property>
		<property name="operationLogService" ref="operationLogService"/>
	</bean>
	<aop:config>
		<aop:aspect id="operationLogAspect" ref="operationLogHandler">
			<aop:pointcut id="serviceMethod" expression="(execution(* com.acca.service.*.save*(..)) || execution(* com.acca.service.*.load*(..)) || execution(* com.acca.service.*.delete*(..)))  and  not execution(* com.acca.service.OperationLogService.*(..))"/>
			<aop:after pointcut-ref="serviceMethod" method="handle"/>
		</aop:aspect>
	</aop:config>
 
0
0
分享到:
评论

相关推荐

    利用Spring机制记录系统日志

    在IT行业中,日志记录是系统监控和故障排查的关键环节。Spring框架,作为一个广泛应用的Java企业级开发框架,提供了丰富的功能来支持开发者实现系统日志的记录。本篇将详细探讨如何利用Spring机制来实现系统操作日志...

    利用 spring annotation AOP 反射 记录日志

    在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能,包括依赖注入、面向切面编程(AOP)等。本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和...

    spring简单注解+log4j记录日志

    在Spring的bean中,我们可以使用`@PostConstruct`和`@PreDestroy`注解来标记初始化和销毁方法,同时在这些方法中插入Log4j的日志记录,以便追踪bean的生命周期。例如: ```java @Service public class MyService { ...

    JAVA 中Spring aop 实现日志记载

    在Java开发中,Spring AOP(面向切面编程)是一个强大的功能,用于实现日志记录。AOP允许我们在不修改原有代码的情况下,插入新的行为,比如日志记录,事务管理等。下面将详细介绍如何在Spring框架中使用AOP来实现...

    Spring之AOP在鉴权和日志记录中的应用

    **Spring AOP在鉴权和日志记录中的应用** **一、引言** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改源代码的情况下,对应用程序进行功能增强...

    Spring Boot项目中使用Logback日志与使用AOP拦截请求日志信息

    在Spring Boot项目中,日志记录是至关重要的,它帮助开发者追踪程序运行状态,调试问题,以及进行性能分析。Logback是广泛使用的日志框架,它由log4j的创始人Ceki Gülcü创建,提供了高效且灵活的日志处理能力。本...

    spring注解管理日志

    1. **配置日志库**:在Spring项目中,我们首先需要在配置文件中设置日志库。例如,如果选择SLF4J和Logback,我们需要在`logback.xml`或`logback-spring.xml`中定义日志级别、输出格式和目标(控制台、文件等)。 2....

    spring aop 切面添加日志

    通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。

    spring aop 操作日志

    本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。

    spring的一个适合初学者的项目

    本项目旨在为初学者提供一个基础的Spring项目实例,帮助大家快速上手并熟悉Spring的核心概念。 首先,我们要了解Spring框架的核心特性。Spring是一个开源的Java平台,它简化了Java EE(企业版)应用的开发。它通过...

    spring-cxf 日志记录配置.zip

    在Spring与CXF框架结合使用的项目中,日志记录配置是一项关键任务,它有助于开发者跟踪系统运行状态,排查错误和优化性能。CXF是Apache组织提供的一个开源服务框架,它支持WS-* Web服务标准,而Spring则是一个强大的...

    Spring boot学习(六)Spring boot实现AOP记录操作日志.pdf

    在本文中,我们将深入探讨如何在Spring Boot项目中利用AOP(面向切面编程)来实现操作日志记录。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以在程序运行时被自动应用到多个点上,比如方法调用之前、...

    spring boot资料以及项目

    这可能包括CRUD操作、用户管理、支付接口、日志记录、异常处理、邮件发送等功能的实现。这些项目实例可以帮助你将理论知识转化为实践技能。 此外,Spring Boot也支持微服务架构,你可以学习如何使用Spring Cloud...

    springboot项目查询es中的日志内容

    在本项目中,我们主要探讨如何使用SpringBoot与Elasticsearch(ES)集成,以便查询存储在ES中的日志内容。Elasticsearch是一种强大的、分布式、实时的搜索和分析引擎,常用于处理大量数据,特别是在日志管理和分析...

    【SpringBoot探索二】SpringBoot项目集成日志记录功能

    本篇文章将深入探讨如何在SpringBoot项目中集成日志记录功能,以实现高效的日志管理和分析。 首先,SpringBoot默认支持多种日志系统,包括Logback、Log4j2等。在本示例中,我们主要关注的是Logback,因为它是...

    spring.net结合三层AOP异常日志记录功能

    通过查看和运行这个项目,可以更深入地理解Spring.NET如何在实际项目中实现AOP异常日志记录。 综上所述,Spring.NET结合三层架构的AOP异常日志记录功能,为.NET开发者提供了一种有效管理异常和提高系统稳定性的解决...

    spring boot项目和vue一起放在tomcat部署

    在本文中,我们将介绍如何将 Spring Boot 项目和 Vue 一起部署到 Tomcat 服务器中。这个过程需要我们对 Tomcat 服务器进行配置,以便能够正确地部署并运行我们的应用程序。 Spring Boot 项目和 Vue 的结合 在 ...

    swagger和spring Aop日志结合

    1. 引入依赖:在项目中添加Swagger和Spring AOP的相关依赖,如`springfox-swagger2`和`springfox-swagger-ui`,以及Spring AOP和日志库(如Logback或Log4j)。 2. 配置Swagger:创建一个配置类,启用Swagger并配置...

    日志组件(spring依赖)

    在Spring应用中使用日志时,我们通常会创建一个名为`Logger`的静态成员变量,它是`org.slf4j.Logger`或`org.apache.log4j.Logger`的实例,然后在需要记录日志的地方调用其提供的方法,如`info()`, `debug()`, `error...

    spring日志配置为log4j

    本篇将详细介绍如何在Spring项目中配置日志系统为Log4j。 首先,我们要明白Log4j是一个功能强大的日志框架,它提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)以及灵活的日志输出配置。Log4j的配置主要...

Global site tag (gtag.js) - Google Analytics