spring log 日志管理

简介:       import java.util.Map; import javax.annotation.Resource; import org.aspectj.lang.

 

 

 

import java.util.Map;

import javax.annotation.Resource;

import org.aspectj.lang.ProceedingJoinPoint;
/**
 * Logger
 */
public class Logger {
	
	@Resource
	private LogService logService ;
	public Object record(ProceedingJoinPoint pjp){
		Log log = new Log();
		try {
			ActionContext ac = ActionContext.getContext(); 
			if(ac != null){
				Map<String, Object> session = ac.getSession();
				if(session != null){
					User user = (User) session.get("user");
					if(user != null){
						log.setOperator("" + user.getId() + ":" + user.getEmail());
					}
				}
			} 
			String mname = pjp.getSignature().getName();
			log.setOperName(mname); 
			Object[] params = pjp.getArgs();
			log.setOperParams(StringUtil.arr2Str(params)); 
			Object ret = pjp.proceed(); 
			log.setOperResult("success"); 
			if(ret != null){
				log.setResultMsg(ret.toString());
			}
			return ret ;
		} catch (Throwable e) {
			log.setOperResult("failure");
			log.setResultMsg(e.getMessage());
		}
		finally{
			logService.saveEntity(log);
		}
		return null ;
	}
}

 

 

<!-- 日志记录仪 -->	
	<bean id="logger" class="com.surveypark.advice.Logger" />
	
	<!-- aop配置 -->	
	<aop:config>
		<!-- 事务切入点通知 -->
		<aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*Service.*(..))" order="2"/>
		
		<!-- 缓存切入点通知 -->
		<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* *..*Service.*(..))" order="0"/>
		
		<!-- Logger切面 -->
		<aop:aspect id="loggerAspect" ref="logger" order="1">
			<aop:around method="record" pointcut="(execution(* *..*Service.save*(..)) 
											or execution(* *..*Service.update*(..)) 
											or execution(* *..*Service.delete*(..)) 
											or execution(* *..*Service.batch*(..)) 
											or execution(* *..*Service.new*(..)) 
											or execution(* *..*Service.move*(..)) 
											or execution(* *..*Service.clear*(..)) 
											or execution(* *..*Service.toggle*(..)))
											and !bean(logService)
											 "/>
		</aop:aspect>
	</aop:config>

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 任务明细bean -->
	<bean id="jobDetailBean" class="org.springframework.scheduling.quartz.JobDetailBean">
		<!-- 通过任务类指定石英任务 -->
		<property name="jobClass" value="com.surveypark.scheduler.CreateLogTablesTask" />
		<property name="jobDataMap">
			<map>
				<entry key="logService" value-ref="logService" />
			</map>
		</property>
	</bean>
	
	<!-- cron触发器bean,设置石英任务的调度策略 -->
	<bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="jobDetailBean" />
		<!-- cron表达式 -->
		<property name="cronExpression">
			<value>0 19 10 3 * ?</value>
		</property>
	</bean>
	
	<!-- 调度工厂bean,激活触发器运行 -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="cronTriggerBean"/>
			</list>
		</property>
	</bean>
</beans>

 

public class CreateLogTablesTask extends QuartzJobBean {

	
	private LogService logService ; 
	public void setLogService(LogService logService) {
		this.logService = logService;
	}
 
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException { 
		String tableName = LogUtil.generateLogTableName(1 );
		logService.createLogTable(tableName);
		 
		tableName = LogUtil.generateLogTableName(2);
		logService.createLogTable(tableName);
		 
		tableName = LogUtil.generateLogTableName(3);
		logService.createLogTable(tableName);
	}
}

  

public void createLogTable(String tableName){
		String sql = "create table if not exists " +tableName + " like logs" ;
		this.executeSQL(sql);
	}

  

 

 

public class LogUtil {
	 
	public static String generateLogTableName(int offset){
		Calendar c = Calendar.getInstance();
		// 2013
		int year = c.get(Calendar.YEAR);
		// 0 -11
		int month = c.get(Calendar.MONTH) + 1 + offset;
		
		if(month > 12){
			year ++ ;
			month = month - 12 ;
		}
		if(month < 1){
			year -- ;
			month = month + 12 ;
		}
		DecimalFormat df = new DecimalFormat();
		df.applyPattern("00");
		return "logs_" + year + "_" + df.format(month) ;
	}
}

 

public void saveEntity(Log t) {
		//insert into logs_2013_9()
		String sql = "insert into " 
				+ LogUtil.generateLogTableName(0) 
				+ "(id,operator,opername,operparams,operresult,resultmsg,opertime) "
				+ "values(?,?,?,?,?,?,?)" ;
		UUIDHexGenerator uuid = new UUIDHexGenerator();
		String id = (String) uuid.generate(null, null);
		this.executeSQL(sql, id,
							t.getOperator(),
							t.getOperName(),
							t.getOperParams(),
							t.getOperResult(),
							t.getResultMsg(),
							t.getOperTime());
	}

  

   

  

 

 

 

 

 

 

 

 

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
9月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
810 1
日志收集和Spring 微服务监控的最佳实践
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1466 0
|
9月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1666 5
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1288 55
|
11月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1939 5
|
11月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
11月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1405 0
|
12月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1282 0