Spring auto trace - acupple/dashcam GitHub Wiki
为了简化Dashcam Trace的接入方式,我们准对Spring和mybatis用户提供了一套根据Trace和Span注解自动追踪日志的Agent。 说的比较复杂,其实就是添加好依赖,然加几个Annotaion就可以自动完成Trace功能。 它可以:
- 自动生成调用链
- 记录调用方法的参数、返回值
- 记录执行的Sql
- 自动捕捉未try catch的报错并记录日志
使用方法如下
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mokey.acupple</groupId>
<artifactId>acupple-dashcam-agent-spring</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>YOUR VERSION HERE</version>
</dependency>
@Configuration
@EnableTrace(basePackages = "org.mokey.acupple.demo")
public class RootConfig { }
- 注解方式
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setPlugins(new Interceptor[]{new MybatisInterceptor()});
return sessionFactory.getObject();
}
- xml方式
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:sqlmap/**/*.xml"></property>
<property name="plugins">
<list>
<bean id="mybatisInterceptor" class="org.mokey.acuuple.dashcam.agent.spring.MybatisInterceptor" />
</list>
</property>
</bean>
//Controller.listConfProperties是一个Trace的起点
@RequestMapping(value = "lsp", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
@Trace
public AjaxResult listConfProperties(Integer appId){
AjaxResult result = new AjaxResult();
try {
List<TplProperty> properties = webService.queryProperties(appId);
result.setRet(true);
result.setData(properties);
}catch (Throwable e){
result.setMsg(e.getMessage());
}
return result;
}
...................
//webService实现业务逻辑
@Trace
public List<TplProperty> queryProperties(Integer appId) {
List<ConfigInfo> configInfos = configInfoDao.search(appId);
if(configInfos == null){
return null;
}
List<TplProperty> properties = new ArrayList<>();
for (ConfigInfo info: configInfos){
TplProperty property = new TplProperty();
property.setName(info.getName());
property.setValue(info.getDefaultValue());
property.setDescription(info.getDescription());
properties.add(property);
}
return properties;
}
....................
//configInfoDao从数据库中读取数据
@Select("SELECT * FROM `configinfo` WHERE `appId` = #{appId}")
List<ConfigInfo> search(@Param("appId")Integer appId)
<dependency>
<groupId>org.mokey.acupple</groupId>
<artifactId>acupple-dashcam-agent-spring-web</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
然后可以添加com.dcf.iqunxing.fx.dashcam.agent.spring.web.TraceLogFilter即可。