`

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
分享到:
评论

相关推荐

    如何使用LoggerFactory.getLogger在Spring Boot中输出日志(1)

    我们通过一个完整的实例和代码演示了如何在Spring Boot项目中获取Logger对象,并在控制器类中使用它来记录日志信息。 日志记录对于应用程序的健壮性和调试非常重要。使用SLF4J和适当的日志框架,开发者可以灵活地...

    spring aop 操作日志

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

    如何使用LoggerFactory.getLogger在Spring Boot中输出日志(2)

    LoggerFactory.getLogger()是Spring Boot中获取日志记录器的方法,它基于SLF4J框架实现。 我们可以通过传递相应的类名给getLogger()方法来获取与该类关联的...希望本文对你在Spring Boot项目中使用日志记录有所帮助。

    springboot 日志配置文件(完整的中文注释)

    spring boot项目记录日志、每日日志归档、彩色日志都会在logback-spring.xml文件中进行配置。给大家分享完整的日志配置信息,以及各种配置的各种含义,有着完整的中文注释。 此logback.xml文件既有成彩色输出也有...

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

    该资源为博客文章"【SpringBoot探索二】SpringBoot项目集成日志记录功能"中的示例

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

    自己系统配置了切面将所需操作数据存入elasticSearch后,使用java进行查询操作es,从而查看筛选日志。前端采用的是layUi,进行简单的筛选和展示

    Spring利用AOP处理项目日志

    AOP正在成为软件开发的下一... 为了理解AOP 如何做到这点,考虑一下记日志的工作。日志本身不太可能是你开发的主程序的主要任务。 如果能将“不可见的”、通用的日志代码注入主程序中,那该多好啊。AOP可以帮助你做到。

    logback-spring.xml

    放在项目的resources下即可,用于配置日志打印在控制台的格式等信息,并且也可以调日志信息打印出来的颜色,还能够使日志信息记录在日志文件上并保存在项目根路径下,springboot则用此logback-spring.xml命名,若是maven...

    spring-boot mybaits spring security redis整合

    aop日志记录。 4、调度 ====== Spring task, 可以查询已经注册的任务。立即执行一次任务。 5、缓存和Session =========== 注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块...

    j2ee的aop方式记录日志

    j2ee项目经常需要记录操作者的日志,本demo在ssh框架上运用了spring的aop,加上threadlocal(用户信息,请求信息)完成了日志记录。

    spring boot 全面的样例代码

    - [在传统Spring应用中使用spring-boot-actuator模块提供监控端点](http://blog.didispace.com/spring-boot-actuator-without-boot/) - [Spring Boot应用的后台运行配置]...

    基于Spring+Spring MVC+Mybatis+mysql实现web聊天室项目源码+数据库+项目说明.7z

    基于Spring+Spring MVC+Mybatis+mysql实现web聊天室项目源码+数据库+项目说明.7z ...用户登录,用户信息展示,用户信息修改,用户头像修改,修改密码,在线聊天,在线列表展示,群聊和私聊,日志记录展示等.

    spring实现用户有效性验证,及用户对数据库的查询,插入的日志记录模块

    本资源是项目实施中的一部分,实现用户的合法性登录,及用户登录日志实现,对数据库的插入,查询也实现日志记录

    springboot_study-master.zip

    基础篇(01—10课)主要介绍 Spring Boot 在项目中最常使用的一些功能点,旨在带领学习者快速掌握 Spring Boot 在开发时需要的知识点,能够把 Spring Boot 相关技术运用到实际项目架构中去。该部分以 Spring Boot ...

    JavaSpring的商城项目前台+后台+api

    JavaSpring的商城项目 Java Spring是一个开源的Java...事务管理:Spring提供了一致的事务管理接口,可以在JTA(Java Transaction API)或非托管环境中使用,简化了事务管理代码。 模型-视图-控制器(MVC):Spring的W

    async-amqp-messaging:库在Spring AMQP项目的基础上构建,以支持AMQP客户的通信,状态控制和日志记录

    记录多日志系统 通过Zabbix进行监视(使用 ) 讯息类型 高可用性和故障转移 回呼 在项目中使用此组件/库应该使客户端之间的通信更加容易。 如果您想在下一个项目中使用此库,请随意使用它。 随时通知我有关细节:D...

    Springboot项目使用Slf4j将日志保存到本地目录的实现代码

    主要介绍了Springboot项目使用Slf4j将日志保存到本地目录的实现方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    基于Spring Boot构建的HTTP请求日志记录和重试补偿工具(95分以上课程大作业).zip

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...

    Spring Boot2集成AOPLog来记录接口访问日志

    主要介绍了Spring Boot2集成AOPLog来记录接口访问日志,日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查、访问统计、监控告警等,需要的朋友可以参考下

    项目管理-Spring学习源码

    面向切面编程(AOP):Spring 提供了 AOP 支持,能够帮助开发者实现横切关注点的模块化,如日志记录、事务管理等,提高了代码的模块化程度。 事务管理:Spring 提供了强大而灵活的事务管理支持,可以通过声明式事务...

Global site tag (gtag.js) - Google Analytics