如何用Spring进行日志管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Spring进行日志管理相关的知识,希望对你有一定的参考价值。
可以用spring aop 进行日志管理,下面是我博客中的内容,项目中也是这么用,只是复杂度更高:
第一步:导包,可以参考:spring4 项目搭建
还需要添加AspectJ(java中最流行的aop框架):
<dependency><groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
第二步:配置bean文件
配置aop可以通过注解,也可以通过配置文件,项目中建议有配置文件,这样便于修改。我先讲解注解方法
配置自动扫描和AspectJ框架
<!-- 配置自动扫描的aop包 --><context:component-scan base-package="com.spring.aop"/>
<!-- 配置 AspectJ -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
如果aop显示不出来就先xml头文件中导入(我相信大家会导入的,就不多说了)
xmlns:aop="http://www.springframework.org/schema/aop"http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
第三步:业务代码,模拟用户的操作
业务代码AopService
package com.spring.aop;import org.springframework.stereotype.Service;
@Service
public class AopService
// 用户登入
public void login()
System.out.println("登入成功");
// 用户退出
public void loginOut()
System.out.println("用户退出系统");
// 用户操作
public void writeABlog()
System.out.println("用户编写博客");
// 用户操作
public void deleteABlog()
System.out.println("用户删除博客");
切面代码:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LogAspect
@After("execution(public void com.spring.aop.AopService.*(..))")
public void afterMethod(JoinPoint joinPoint)
String opreate = joinPoint.getSignature().getName();
System.out.println("ITDragon opreate " + opreate);
测试类:
package com.spring.aop;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AopTest
private ApplicationContext ctx = null;
ctx = new ClassPathXmlApplicationContext("beans.xml");
@Test
public void aopTest()
AopService aopService = (AopService) ctx.getBean("aopService");
aopService.login();
aopService.writeABlog();
aopService.deleteABlog();
aopService.loginOut();
测试结果:
ITDragon opreate login
用户编写博客
ITDragon opreate writeABlog
用户删除博客
ITDragon opreate deleteABlog
用户退出系统
ITDragon opreate loginOut
@Before: 前置通知, 在方法执行之前执行
@After: 后置通知, 在方法执行之后执行
@AfterRunning: 返回通知, 在方法返回结果之后执行,方法必须有返回值。需要添加returning = "result",其中result就是返回结构,
@AfterThrowing: 异常通知, 在方法抛出异常之后,有异常的时候才执行
@AfterThrowing(pointcut="execution(public void com.spring.aop.AopService.*(..))",throwing="e")
@Around: 环绕通知, 围绕着方法执行
@Component:标识该类受spring管理
@Aspect: 标识该类是一个切面
execution(public void com.spring.aop.AopService.*(..)) : 切入点签名表达式,用*号表示所有,也可以指定,括号内两点表示多个变量,也可以指定,还可以用 && , || , !;以每个execution为一个单位
JoinPoint:连接点,该参数可以访问到更多的数据,还有很多方法可以自己试试。
@Order(n): 切面执行的优先级,n值越小,越优先执行
还有重用切面,等知识我就不过多描述了,毕竟是入门,讲一些常用的就可以了。
使用xml配置文件
import org.aspectj.lang.JoinPoint;
public class LogAspect
public String afterMethod(JoinPoint joinPoint)
String opreate = joinPoint.getSignature().getName();
System.out.println("ITDragon opreate " + opreate);
return "";
配置文件:
<bean class="com.spring.aop.LogAspect" id="logAspect"></bean>
<!-- aop配置 -->
<aop:config>
<!-- 切点 -->
<aop:pointcut expression="execution(public void com.spring.aop.AopService.*(..))" id="aop"/>
<!-- 切面 : ref 的值是 切面类的id-->
<aop:aspect id="aspect" ref="logAspect">
<!-- 前置方法 : pointcut-ref 的值是 切点的id -->
<aop:before method="afterMethod" pointcut-ref="aop"/>
</aop:aspect>
</aop:config>
还是一样的测试方法,其结果为:
ITDragon opreate login登入成功
ITDragon opreate writeABlog
用户编写博客
ITDragon opreate deleteABlog
用户删除博客
ITDragon opreate loginOut
用户退出系统
在需要打印日志的地方添加切入点即可。切入点函数名尽量见名知意。这样切面函数才能通用。
参考技术A 楼上写的不错 好详细java框架-----spring框架------在自己的项目中如何用maven管理spring相关jar包
1.文章内容概述:
spring框架是支持maven的,因为spring框架的所有模块打包而成的jar包以及spring所依赖的其他jar包都被存放了一份在maven的中央仓库中,如果你的项目使用maven进行管理,那么你就可以在你的项目中通过maven来引入你的项目所依赖的spring相关的jar包或其他依赖库。
2.spring框架中maven相关的东西:
概述:使用maven管理spring相关的jar包,需要在pom.xml中配置groupId、artifactId之类的东西,只有在pom.xml中配置了这些东西,maven才会为你的项目查找maven的本地资源库--->中央仓库--->其他远程仓库,下载更新项目所依赖的相关jar包到你的本地仓库。
-
- groupId is
org.springframework
. - ArtifactId见下表
- groupId is
GroupId | ArtifactId | Description |
---|---|---|
org.springframework |
spring-aop |
Proxy-based AOP support |
org.springframework |
spring-aspects |
AspectJ based aspects |
org.springframework |
spring-beans |
Beans support, including Groovy |
org.springframework |
spring-context |
Application context runtime, including scheduling and remoting abstractions |
org.springframework |
spring-context-support |
Support classes for integrating common third-party libraries into a Spring application context |
org.springframework |
spring-core |
Core utilities, used by many other Spring modules |
org.springframework |
spring-expression |
Spring Expression Language (SpEL) |
org.springframework |
spring-instrument |
Instrumentation agent for JVM bootstrapping |
org.springframework |
spring-instrument-tomcat |
Instrumentation agent for Tomcat |
org.springframework |
spring-jdbc |
JDBC support package, including DataSource setup and JDBC access support |
org.springframework |
spring-jms |
JMS support package, including helper classes to send and receive JMS messages |
org.springframework |
spring-messaging |
Support for messaging architectures and protocols |
org.springframework |
spring-orm |
Object/Relational Mapping, including JPA and Hibernate support |
org.springframework |
spring-oxm |
Object/XML Mapping |
org.springframework |
spring-test |
Support for unit testing and integration testing Spring components |
org.springframework |
spring-tx |
Transaction infrastructure, including DAO support and JCA integration |
org.springframework |
spring-web |
Web support packages, including client and web remoting |
org.springframework |
spring-webmvc |
REST Web Services and model-view-controller implementation for web applications |
org.springframework |
spring-webmvc-portlet |
MVC implementation to be used in a Portlet environment |
org.springframework |
spring-websocket |
WebSocket and SockJS implementations, including STOMP support |
3.在自己的项目中使用maven为我的项目添加spring相关jar包
概述:在自己的项目中使用maven添加项目所依赖的spring相关jar包有多种方法,各种方法的详细状况叙述如下
3.1方法一,直接添加maven中央仓库中的spring框架相应模块对应的jar包,具体配置方法如下:
pom.xml
<dependencies> <dependency> <groupId>org.springframework</groupId><!--见本文章第二部分内容--> <artifactId>spring-context</artifactId><!--见本文章中第二部分内容:表格--> <version>4.3.4.RELEASE</version><!--spring相关模块对应jar包的版本--> <scope>runtime</scope><!-- Note the scope can be declared as runtime if you don’t need to compile against Spring APIs, which is typically the case for basic dependency injection use cases.--> </dependency> </dependencies>
3.2方法二,不从maven中央仓库下载,而是从其他远程仓库(这里指 Spring Maven repository也即spring网站)下载spring框架相关jar包到maven本地仓库,具体配置方法如下
概述:The example above works with the Maven Central repository. To use the Spring Maven repository (e.g. for milestones or developer snapshots), you need to specify the repository location in your Maven configuration.
具体配置方法:如下,配置pom.xml文件
pom.xml
For full releases:
<repositories> <repository> <id>io.spring.repo.maven.release</id> <url>http://repo.spring.io/release/</url> <snapshots><enabled>false</enabled></snapshots> </repository> </repositories>
For milestones:
<repositories> <repository> <id>io.spring.repo.maven.milestone</id> <url>http://repo.spring.io/milestone/</url> <snapshots><enabled>false</enabled></snapshots> </repository> </repositories>
And for snapshots:
<repositories> <repository> <id>io.spring.repo.maven.snapshot</id> <url>http://repo.spring.io/snapshot/</url> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories>
3.3方法三,Maven "Bill Of Materials" Dependency
概述:
It is possible to accidentally mix different versions of Spring JARs when using Maven. For example, you may find that a third-party library, or another Spring project, pulls in a transitive dependency to an older release. If you forget to explicitly declare a direct dependency yourself, all sorts of unexpected issues can arise.
To overcome such problems Maven supports the concept of a "bill of materials" (BOM) dependency. You can import the spring-framework-bom
in your dependencyManagement
section to ensure that all spring dependencies (both direct and transitive) are at the same version.
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>4.3.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
An added benefit of using the BOM is that you no longer need to specify the <version>
attribute when depending on Spring Framework artifacts:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependencies>
第三部分内容小结:通过上面所述内容我们可以发现,使用maven给我们的软件项目添加spring各个模块对应的jar包以及spring所依赖的jar包共有两种方法,第一种方法就是将pom.xml配置成从maven中央仓库来下载spring相关jar包到maven本地仓库,这时主要是需要配置groupId、artifactId之类的元素;第二种方法就是将pom.xml配置成从spring远程仓库而非maven的中央仓库来进行管理spring相关jar包,从spring远程仓库下载而不是从maven中央仓库下载项目所依赖的spring相关jar包到计算机maven本地仓库。使用上述两种方法管理项目所依赖的spring相关jar包都是可以的,但是无论使用上述哪种方法,都要注意spring各个模块的jar包的版本冲突问题,譬如很可能你的spring-context-4.3.4.RELEASE.jar,但是spring-web模块相关jar包就配置成了3.4.3.RELEASE.jar,版本不一致,有可能会导致运行过程出错,为了避免spring不同模块之间版本不一致的问题,可以使用本章节第三小节:“ 3.3方法三,Maven "Bill Of Materials" Dependency”中所述方法配置pom.xml
以上是关于如何用Spring进行日志管理的主要内容,如果未能解决你的问题,请参考以下文章