当前位置:   article > 正文

阿里云sls集成_com.aliyun.openservices

com.aliyun.openservices

废话不多说,直接上过程。
第一步,在pom.xml文件中添加以下坐标

		<!-- 阿里云sls日志服务 -->
		<dependency>
			<groupId>com.aliyun.openservices</groupId>
			<artifactId>aliyun-log-producer</artifactId>
			<version>0.3.10</version>
		</dependency>
		<dependency>
		     <groupId>com.aliyun.openservices</groupId>
		     <artifactId>aliyun-log-log4j-appender</artifactId>
		     <version>0.1.13</version>
		</dependency>
		<dependency>
		  <groupId>com.szboanda</groupId>
		  <artifactId>aliyun-sls</artifactId>
		  <version>1.0.1</version>
		</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第二部,点击copylib.bat重新下载依赖
第三步,从lib文件夹下找到 aliyun-sls-1.0.1.jar包打开,找到spring-mvc.xml.bak文件夹,拷贝到桌面上,
复制出以下内容,粘贴到你自己项目中的spring-mvc.xml文件里(一般放在最下面

	<aop:aspectj-autoproxy proxy-target-class="true"/>
	
	<!-- 阿里云日志项目配置 -->
	<beans:bean id="ProjectConfig" class="com.aliyun.openservices.aliyun.log.producer.ProjectConfig">  
		<beans:constructor-arg value="" index="0" /><!-- project 待填写-->
		<beans:constructor-arg value="" index="1"  /><!-- endpoint 待填写 -->
		<beans:constructor-arg value="" index="2" /><!-- accessKeyId 待填写 -->
		<beans:constructor-arg value="" index="3" /><!-- accessKeySecret 待填写 -->
	</beans:bean>
	
	<!-- 生产者配置 -->
	<beans:bean id="ProducerConfig" class="com.aliyun.openservices.aliyun.log.producer.ProducerConfig" />
	<!-- 生产者 -->
	<beans:bean id="Producer" class="com.aliyun.openservices.aliyun.log.producer.LogProducer">
		<beans:constructor-arg ref="ProducerConfig" index="0" />
	</beans:bean>
	
	<!-- 系统日志切面 -->
	<beans:bean id="sysLogAspect" class="com.szboanda.aliyun.log.SysLogAspect">
		<beans:constructor-arg ref="Producer" index="0" />
		<beans:constructor-arg ref="ProjectConfig" index="1" />
		<beans:constructor-arg value="xietong2qi" index="2" />
		<beans:constructor-arg value="" index="3" /> <!-- 系统名称 待填写 -->
		<beans:constructor-arg value="自定义操作" index="4" />
		<beans:constructor-arg value="新增或修改操作" index="5" />
		<beans:constructor-arg value="删除操作" index="6" />
		<beans:constructor-arg value="菜单访问操作" index="7" />
	</beans:bean>
	
	<!-- 配置形式 -->
	<aop:config>
		<!-- 动态表单保存切点 -->
		<aop:pointcut expression="execution(* com.szboanda.dynamicform.viewresolver.controller.ViewResolverController.saveOrupdate(..))" id="dynamicformsaveCut"/>
		<!-- 自定义注解切点 -->
		<aop:pointcut expression="@annotation(com.szboanda.aliyun.log.SysLog)" id="sysAnnotationCut"/>
		<!-- 动态表单删除切点 -->
		<aop:pointcut expression="execution(* com.szboanda.dynamicform.viewresolver.controller.ViewResolverController.deletebymbbhxh(..))" id="dynamicformdeleteCut"/>
		<!-- 访问菜单切点 -->
		<aop:pointcut expression="execution(* com.szboanda.platform.rms.menu.controller.MenuController.addMenuAccess(..))" id="menuAccessCut"/>
		
		<!-- aspect 标签切面 -->
		<aop:aspect ref="sysLogAspect" order="0">
			<aop:around method="sysAnnotationCut" pointcut-ref="sysAnnotationCut"/>
			<aop:after method="dynamicformsaveCut" pointcut-ref="dynamicformsaveCut" />
			<aop:after method="dynamicformdeleteCut" pointcut-ref="dynamicformdeleteCut" />
			<aop:after method="menuAccessCut" pointcut-ref="menuAccessCut" />
		</aop:aspect>
	</aop:config>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

其中 阿里云日志项目配置(sls) 要找对应项目负责人拿,同时,系统日志切面需要填写当前系统名称
在这里插入图片描述
在这里插入图片描述
第四步,查看自己spring-mvc.xml 是否有aop头部声明,要是没有声明,请将该aop头部声明拷贝到自己项目中的spring-mvc.xml文件中。
在这里插入图片描述
这里附上AOP头部声明

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
  • 1
  • 2

第五步,使用sls自定义注解(如果你的项目里面,功能全部是通过动态表单,动态列表实现,没有自己写controller层,请忽略这步,如果有写,请在对应方法上加上注解以便记录用户日志,推送阿里云sls)
在这里插入图片描述
这里附上注解以及注解路径:

import com.szboanda.aliyun.log.SysLog;
@SysLog(action="方法说明")
  • 1
  • 2

第六步,重写公司平台类,将下面的类拷贝到各位所负责的项目中。(由于平台包日志记录工具类使用的是类方法调用,AOP不支持监控静态方法,且若打成jar包,会存在类重复问题,因此只能重写

package com.szboanda.component.log.syslog;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.slf4j.LoggerFactory;

import com.szboanda.component.log.cmommon.CurrentRequestData;

/**
 * @Title: 系统日志输出类
 * @author 庞东博
 * @since JDK1.6
 * @history 2017年5月23日 庞东博 新建
 */
public class SysLog {
    /**
     * 输出trace级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void trace(Class<?> clazz, String msg) {
        LoggerFactory.getLogger(clazz).trace(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.trace(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出trace级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void trace(Class<?> clazz, String format, Object... arguments) {
        LoggerFactory.getLogger(clazz).trace(resetMessage(format), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.trace(resetMessage(format));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出trace级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void trace(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).trace(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.trace(resetMessage(msg), t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出debug级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void debug(Class<?> clazz, String msg) {
        LoggerFactory.getLogger(clazz).debug(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.debug(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出debug级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void debug(Class<?> clazz, String format, Object... arguments) {
        LoggerFactory.getLogger(clazz).debug(resetMessage(format), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.debug(resetMessage(format));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出debug级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void debug(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).debug(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.debug(resetMessage(msg), t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出info级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void info(Class<?> clazz, String msg) {
        LoggerFactory.getLogger(clazz).info(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.info(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出info级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void info(Class<?> clazz, String format, Object... arguments) {
        LoggerFactory.getLogger(clazz).info(resetMessage(format), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.info(resetMessage(format));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出info级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void info(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).info(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.info(resetMessage(msg),t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出warn级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void warn(Class<?> clazz, String msg) {
        LoggerFactory.getLogger(clazz).warn(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.warn(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出warn级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void warn(Class<?> clazz, String format, Object... arguments) {
        LoggerFactory.getLogger(clazz).warn(resetMessage(format), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.warn(resetMessage(format));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出warn级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void warn(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).warn(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.warn(resetMessage(msg),t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出error级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void error(Class<?> clazz, String msg) {
        LoggerFactory.getLogger(clazz).error(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出error级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void error(Class<?> clazz, String format, Object... arguments) {
        LoggerFactory.getLogger(clazz).error(resetMessage(format), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(resetMessage(format));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出error级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void error(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).error(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(resetMessage(msg),t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出alert级别的日志
     * 
     * @param clazz
     * @param msg
     */
    public static void alert(Class<?> clazz, String msg) {
        LoggerFactory.getLogger("ALERT").error(resetMessage(msg));
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(resetMessage(msg));
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出alert级别的日志
     * 
     * @param clazz
     * @param format
     * @param arguments
     */
    public static void alert(Class<?> clazz, String format, Object... arguments) {
        String msg = resetMessage(format);
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String time = fmt.format(new Date());
        StringBuilder sbLog = new StringBuilder(100);
        sbLog.append(time).append(" [ ").append(clazz.getName()).append(" ] - [").append(" ALERT ] ").append(msg);
        LoggerFactory.getLogger("ALERT").error(sbLog.toString(), arguments);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(sbLog.toString());
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 输出alert级别的日志
     * 
     * @param clazz
     * @param msg
     * @param t
     */
    public static void alert(Class<?> clazz, String msg, Throwable t) {
        LoggerFactory.getLogger(clazz).error(resetMessage(msg), t);
        try {
            Logger logger = LogManager.getLogger(clazz);
            logger.error(resetMessage(msg), t);
        }catch (Exception e) {
        	LoggerFactory.getLogger(clazz).error(e.getMessage());
		}
    }

    /**
     * 为日志内容添加关键内容
     * 
     * @param msg 日志内容
     * @return
     */
    private static String resetMessage(String msg) {
        if (null == msg) {
            msg = "Unknow error。";
        }
        String traceId = CurrentRequestData.get().getTraceId();
        String userId = CurrentRequestData.get().getYhid();
        String deptId = CurrentRequestData.get().getBmbh();
        StringBuilder sbMsg = new StringBuilder(msg.length() + 150);
        sbMsg.append("[ ").append(traceId).append(" ] - [ ").append(userId).append(" ] - [ ").append(deptId).append(" ] - ").append(msg);
        return sbMsg.toString();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342

第七步,配置log4j.properties文件(将下面的内容拷贝到各位项目中的log4j文件中)

log4j.rootLogger = ERROR,stdout,D,I,W,E,loghub
# 指定loghub的配置类
log4j.appender.loghub=com.aliyun.openservices.log.log4j.LoghubAppender
# project名称
log4j.appender.loghub.project=xxx
# 存储空间名称
log4j.appender.loghub.logStore=xxx
# 地域名称,这里使用公网名称,可以去自己的日志服务里查看地域名称
log4j.appender.loghub.endpoint=xxx
# 用户标识
log4j.appender.loghub.accessKeyId=xxx
# 用户标识认证
log4j.appender.loghub.accessKeySecret=xxx
#指定当前日志的主题,可以为空
log4j.appender.loghub.topic = "log4j"
# 指定当前日志的来源,可以为空
log4j.appender.loghub.source = "xxx"
#指定日志输出类配置
log4j.appender.loghub.layout=org.apache.log4j.PatternLayout
# 输出格式
log4j.appender.loghub.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# 单个 producer 实例能缓存的日志大小上限,默认为 100MB
log4j.appender.loghub.totalSizeInBytes=104857600
# 如果 producer 可用空间不足,调用者在 send 方法上的最大阻塞时间,默认为 60 秒。为0则永久阻塞
log4j.appender.loghub.maxBlockMs=0
# 执行日志发送任务的线程池大小,默认为可用处理器个数。
log4j.appender.loghub.ioThreadCount=8
# 当一个 ProducerBatch 中缓存的日志大小大于等于 batchSizeThresholdInBytes 时,该 batch 将被发送,默认为 512 KB,最大可设置成 5MB。
log4j.appender.loghub.batchSizeThresholdInBytes=524288
# 当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送,默认为 4096,最大可设置成 40960。
log4j.appender.loghub.batchCountThreshold=4096
# 一个 ProducerBatch 从创建到可发送的逗留时间,默认为 2 秒,最小可设置成 100 毫秒
log4j.appender.loghub.lingerMs=2000
# 如果某个 ProducerBatch 首次发送失败,能够对其重试的次数,默认为 10 次
log4j.appender.loghub.retries=10
# 首次重试的退避时间,默认为 100 毫秒。
log4j.appender.loghub.baseRetryBackoffMs=100
# 重试的最大退避时间,默认为 50 秒。
log4j.appender.loghub.maxRetryBackoffMs=50000
#时间格式
timeFormat = yyyy-MM-dd'T'HH:mm:ssZ
#时区
timeZone = Asia/Beijing
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

其中:
在这里插入图片描述
第八步:大功告成,启动系统后,点击单个菜单,然后上阿里云查看日志是否推送成功

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/386593
推荐阅读
相关标签
  

闽ICP备14008679号