项目如何进行日志管理,AOP原理是什么,为什么要AOP+Kafka模块封装

1.日志的配置文件--classpath下 模板如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<!-- 这个是配置全局项目日志,上线初期阶段:为了看系统运行状况Threshold设置info或debug,当系统运行一段时间后,稳定了Threshold设置warn或error,提高日志级别,减少日志输出量 -->
 
	<appender name="INFO" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="file" value="${catalina.base}/logs/flash-info.log" />
		<param name="threshold" value="info" />
		<param name="encoding" value="UTF-8" />
		<param name="append" value="true" />
		<!-- Rollover at midnight each day -->
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%n%-4r [%d{yyyy-MM-dd HH:mm:ss}] %p [%t] %c | %m%n" />
		</layout>
	</appender>
 
	<appender name="ERROR" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="file" value="${catalina.base}/logs/flash-error.log" />
		<param name="threshold" value="error" />
		<param name="encoding" value="UTF-8" />
		<param name="append" value="false" />
		<!-- Rollover at midnight each day -->
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%n%-4r [%d{yyyy-MM-dd HH:mm:ss}] %p [%t] %c | %m%n" />
		</layout>
	</appender>
 
	<!-- name:debug -->
	<appender name="debug" class="org.apache.log4j.DailyRollingFileAppender">
		<!-- File: 日志文件存放路径 -->
		<param name="File" value="${catalina.base}/logs/debug/debug.log" />
		<!-- Append: 追加模式 -->
		<param name="Append" value="true" />
		<!-- Threshold: 打印日志级别 debug、info、warn、error -->
		<param name="Threshold" value="info" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<param name="encoding" value="UTF-8" />
		<!-- DatePattern: 日志分割 错误日志以小时来分割 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%t] %c | %m%n" />
		</layout>
	</appender>
 
	<appender name="sqlLogger" class="org.apache.log4j.DailyRollingFileAppender">
		<!-- File: 日志文件存放路径 -->
		<param name="File" value="${catalina.base}/logs/sql/sql.log" />
		<param name="Append" value="true" />
		<!-- Threshold设置为info级别 -->
		<param name="Threshold" value="info" />
		<param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
		<param name="encoding" value="UTF-8" />
		<!-- DatePattern: 日志分割 事件日志以小时来分割 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%t] %c | %m%n" />
		</layout>
	</appender>
 
	<root>
		<appender-ref ref="INFO" />
		<appender-ref ref="ERROR" />
	</root>
 
</log4j:configuration>

2.表设计

 3.注入线程池 bean

/**
 * 执行周期性或定时任务
 */
@Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService()
{
    return new ScheduledThreadPoolExecutor(corePoolSize,
            new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
    {
        @Override
        protected void afterExecute(Runnable r, Throwable t)
        {
            super.afterExecute(r, t);
            Threads.printException(r, t);
        }
    };
}

4.操作日志

  使用:在方法上使用注解@Log就可以实现记录操作日志的功能

@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysUser user)
{
    ......
    return toAjax(userService.insertUser(user));
}

AOP的原理是什么

Spring AOP 概述

相信大家或多或少的了解过AOP,都知道它是面向切面编程,在网上搜索可以找到很多的解释。这里我用一句话来总结:AOP是能够让我们在不影响原有功能的前提下,为软件横向扩展功能。 那么横向扩展怎么理解呢,我们在WEB项目开发中,通常都遵守三层原则,包括控制层(Controller)->业务层(Service)->数据层(dao),那么从这个结构下来的为纵向,它具体的某一层就是我们所说的横向。我们的AOP就是可以作用于这某一个横向模块当中的所有方法。

我们在来看一下AOP和OOP的区别:AOP是OOP的补充,当我们需要为多个对象引入一个公共行为,比如日志,操作记录等,就需要在每个对象中引用公共行为,这样程序就产生了大量的重复代码,使用AOP可以完美解决这个问题。

接下来介绍一下提到AOP就必须要了解的知识点:

切面:拦截器类,其中会定义切点以及通知
切点:具体拦截的某个业务点。
通知:切面当中的方法,声明通知方法在目标业务层的执行位置,通知类型如下:
前置通知:@Before 在目标业务方法执行之前执行
后置通知:@After 在目标业务方法执行之后执行
返回通知:@AfterReturning 在目标业务方法返回结果之后执行
异常通知:@AfterThrowing 在目标业务方法抛出异常之后
环绕通知:@Around 功能强大,可代替以上四种通知,还可以控制目标业务方法是否执行以及何时执行

为什么要AOP+Kafka模块封装

核心思想:

spring的aop切面负责产生数据,也就是数据源(也可以直接通过logstash读取log文件)

kafka 消息队列来做数据缓冲以及异步传输

使用模块封装更方便其他项目所依赖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值