你可以根据自己的需求自定义,需要记录那些,该例子,只对增删改做记录 。
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>
分享到:
相关推荐
在IT行业中,日志记录是系统监控和故障排查的关键环节。Spring框架,作为一个广泛应用的Java企业级开发框架,提供了丰富的功能来支持开发者实现系统日志的记录。本篇将详细探讨如何利用Spring机制来实现系统操作日志...
在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能,包括依赖注入、面向切面编程(AOP)等。本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和...
在Spring的bean中,我们可以使用`@PostConstruct`和`@PreDestroy`注解来标记初始化和销毁方法,同时在这些方法中插入Log4j的日志记录,以便追踪bean的生命周期。例如: ```java @Service public class MyService { ...
在Java开发中,Spring AOP(面向切面编程)是一个强大的功能,用于实现日志记录。AOP允许我们在不修改原有代码的情况下,插入新的行为,比如日志记录,事务管理等。下面将详细介绍如何在Spring框架中使用AOP来实现...
**Spring AOP在鉴权和日志记录中的应用** **一、引言** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它为开发者提供了在不修改源代码的情况下,对应用程序进行功能增强...
在Spring Boot项目中,日志记录是至关重要的,它帮助开发者追踪程序运行状态,调试问题,以及进行性能分析。Logback是广泛使用的日志框架,它由log4j的创始人Ceki Gülcü创建,提供了高效且灵活的日志处理能力。本...
1. **配置日志库**:在Spring项目中,我们首先需要在配置文件中设置日志库。例如,如果选择SLF4J和Logback,我们需要在`logback.xml`或`logback-spring.xml`中定义日志级别、输出格式和目标(控制台、文件等)。 2....
通过这个项目,我们可以学习到如何在Spring AOP中实现日志记录,这不仅可以帮助我们调试和监控应用程序,还可以为未来的维护提供宝贵的线索。同时,这也是理解和实践面向切面编程的一个很好的起点。
本资源用来展示如何使用 spring aop 进行日志记录,例子里面通过aop的配置,把产生的日志存放到当前项目的根目录下,而且对方法执行过程中的参数进行了记录,对于aop如何记录日志不清楚的同学可以看看。
本项目旨在为初学者提供一个基础的Spring项目实例,帮助大家快速上手并熟悉Spring的核心概念。 首先,我们要了解Spring框架的核心特性。Spring是一个开源的Java平台,它简化了Java EE(企业版)应用的开发。它通过...
在Spring与CXF框架结合使用的项目中,日志记录配置是一项关键任务,它有助于开发者跟踪系统运行状态,排查错误和优化性能。CXF是Apache组织提供的一个开源服务框架,它支持WS-* Web服务标准,而Spring则是一个强大的...
在本项目中,我们主要探讨如何使用SpringBoot与Elasticsearch(ES)集成,以便查询存储在ES中的日志内容。Elasticsearch是一种强大的、分布式、实时的搜索和分析引擎,常用于处理大量数据,特别是在日志管理和分析...
在本文中,我们将深入探讨如何在Spring Boot项目中利用AOP(面向切面编程)来实现操作日志记录。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以在程序运行时被自动应用到多个点上,比如方法调用之前、...
这可能包括CRUD操作、用户管理、支付接口、日志记录、异常处理、邮件发送等功能的实现。这些项目实例可以帮助你将理论知识转化为实践技能。 此外,Spring Boot也支持微服务架构,你可以学习如何使用Spring Cloud...
spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...
本篇文章将深入探讨如何在SpringBoot项目中集成日志记录功能,以实现高效的日志管理和分析。 首先,SpringBoot默认支持多种日志系统,包括Logback、Log4j2等。在本示例中,我们主要关注的是Logback,因为它是...
通过查看和运行这个项目,可以更深入地理解Spring.NET如何在实际项目中实现AOP异常日志记录。 综上所述,Spring.NET结合三层架构的AOP异常日志记录功能,为.NET开发者提供了一种有效管理异常和提高系统稳定性的解决...
在本文中,我们将介绍如何将 Spring Boot 项目和 Vue 一起部署到 Tomcat 服务器中。这个过程需要我们对 Tomcat 服务器进行配置,以便能够正确地部署并运行我们的应用程序。 Spring Boot 项目和 Vue 的结合 在 ...
1. 引入依赖:在项目中添加Swagger和Spring AOP的相关依赖,如`springfox-swagger2`和`springfox-swagger-ui`,以及Spring AOP和日志库(如Logback或Log4j)。 2. 配置Swagger:创建一个配置类,启用Swagger并配置...
在Spring应用中使用日志时,我们通常会创建一个名为`Logger`的静态成员变量,它是`org.slf4j.Logger`或`org.apache.log4j.Logger`的实例,然后在需要记录日志的地方调用其提供的方法,如`info()`, `debug()`, `error...