`

Spring中添加 Log4j注解

阅读更多

参照别人的代码做了个Demo如下:

Spring的加载时自动自行此bean的应用

package cn.com.vnvtrip.spring.log4j.ext;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import cn.com.vnvtrip.spring.log4j.anonation.Logger;
/**
 * Log4j日志注解化的应用 基本原理如下:
 *  通过自定义一个BeanPostProcessor, 在对所有bean初始化之前,
 * 对每一个bean的field进行检查, 是否适用了Logger注解, 如果有, 则调用LogFactory创建一个logger实例.
 * 
 * @author longgangbai
 * 
 */
public class LogBeanPostProcessor implements BeanPostProcessor {
 /**
  * 初始化之后的操作
  */
 public Object postProcessAfterInitialization(Object bean, String beanName)
   throws BeansException {
  return bean;
 }
 /**
  * 初始化之前的操作的处理
  */
 public Object postProcessBeforeInitialization(Object bean, String beanName)
   throws BeansException {
  List<Class<?>> clazzes = getAllClasses(bean);
  for (Class<?> clazz : clazzes) {
   initializeLog(bean, clazz);
  }
  return bean;
 }
 /**
  * 初始化添加日志功能的
  * 
  * @param bean
  * @param clazz
  */
 private void initializeLog(Object bean, Class<? extends Object> clazz) {
  Field[] fiels = clazz.getDeclaredFields();
  for (Field field : fiels) {
   if (field.getAnnotation(Logger.class) == null) {
    continue;
   }
   if (!field.getType().isAssignableFrom(Log.class)) {
    continue;
   }
   // 獲取是否可以方法的属性
   boolean visable = field.isAccessible();
   try {
    // 設置可以属性为可以访问
    field.setAccessible(true);
    field.set(bean, LogFactory.getLog(clazz));
   } catch (Exception e) {
    throw new BeanInitializationException(String.format(
      "初始化logger失败!bean=%s;field=%s", bean, field));
   } finally {
    // 恢复原来的访问修饰
    field.setAccessible(visable);
   }
  }
 }
 /**
  * 
  * 獲取制定bean的class以及所有父类的列表,该列表中顺序为从父类中当前类
  * 
  * @param bean
  * @return
  */
 private List<Class<?>> getAllClasses(Object bean) {
  Class<? extends Object> clazz = bean.getClass();
  List<Class<?>> clazzes = new ArrayList<Class<?>>();
  while (clazz != null) {
   clazzes.add(clazz);
   clazz = clazz.getSuperclass();
  }
  Collections.reverse(clazzes);
  return clazzes;
 }
}
設置注解类
package cn.com.vnvtrip.spring.log4j.anonation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 添加一個日志注解类
 * 
 * @author longgangbai
 * 
 */
@Retention(RetentionPolicy.RUNTIME) //运行是编译
@Target( { ElementType.FIELD })  //修饰的字段
public @interface Logger {
}
package cn.com.vnvtrip.spring.log4j.test;
import org.apache.commons.logging.Log;
import cn.com.vnvtrip.spring.log4j.anonation.Logger;
public class LoggAnonation {
 @Logger
 private static Log log;
 public double divide(int a, int b) {
  if (b == 0) {
   log.error("被除数不可以为0");
  } else {
   return a / b;
  }
  return -1;
 }
}
Spring配置:
 
<?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-2.5.xsd">
 <bean id="logBeanPocessor"
  class="cn.com.vnvtrip.spring.log4j.ext.LogBeanPostProcessor" />
  <bean id="loganonation" class="cn.com.vnvtrip.spring.log4j.test.LoggAnonation"/>
</beans>
 
测试类:
package cn.com.vnvtrip.spring.log4j.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class LogTest {
 public static void main(String[] args) {
  ApplicationContext ctxapp = new ClassPathXmlApplicationContext(
    "applicationContext.xml");
  LoggAnonation logtest = (LoggAnonation) ctxapp.getBean("loganonation");
  double a = logtest.divide(8, 0);
  System.out.println(a);
 }
}

 

分享到:
评论

相关推荐

    spring简单注解+log4j记录日志

    综上所述,"spring简单注解+log4j记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...

    spring log4j 实例

    接着,要在Spring应用中使用Log4j,你需要在Spring的配置文件(如`applicationContext.xml`)中引入Log4j的依赖。通常,我们会在Spring的配置文件中定义一个Bean,让Spring自动初始化Log4j: ```xml ...

    spring整合log4j

    1. **引入依赖**:在项目的Maven或Gradle构建文件中添加Log4j的依赖库。对于Maven,可以在`pom.xml`中加入如下代码: ```xml &lt;groupId&gt;log4j &lt;artifactId&gt;log4j &lt;version&gt;1.2.17 ``` 2. **配置Log4j**:...

    spring框架和log4j日志用到的jar包

    在Spring框架中,可以通过Spring的Log4j配置来统一管理日志,方便调试和问题排查。 在提供的文件名称列表中,虽然没有具体的jar包名称,但通常Spring框架所需的jar包包括:spring-core、spring-context、spring-...

    Spring Aop+Log4j 动态日志

    在IT行业中,Spring AOP(面向切面编程)和Log4j是两个非常重要的工具,它们在实际开发中起着至关重要的作用。本篇将详细探讨如何结合Spring AOP和Log4j实现动态日志记录。 Spring AOP是Spring框架的一个重要特性,...

    springmvc5+hibernate5+junit4+log4j2整合实例

    6. **配置Log4j2**:在项目中添加Log4j2的配置文件(如log4j2.xml或log4j2.json),定义日志级别、输出目的地(如控制台、文件)和格式。 7. **编写业务逻辑**:使用Spring MVC的Controller、Service和DAO组件实现...

    springboot+mybatis+log4j2

    通过在`pom.xml`文件中添加Spring Boot的依赖,我们可以快速构建一个基于Spring的应用。 接下来是MyBatis,这是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和...

    spring+springMVC+mybatis+log4j框架整合

    1. 引入相关jar包:添加Spring、SpringMVC、Mybatis和log4j的依赖库到项目中。 2. 配置Spring:创建ApplicationContext.xml,定义Bean的配置。 3. 集成SpringMVC:配置web.xml,设置DispatcherServlet,定义servlet-...

    Spring5整合Log4j2日志工具Jar

    在Maven项目中,你需要在`pom.xml`文件中添加Log4j2和Spring的相关依赖。例如: ```xml &lt;!-- Spring 5依赖 --&gt; &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context &lt;version&gt;5.x.y.RELEASE &lt;!-- ...

    springmvc log4j2 logback 注解 jackson 日志脱敏实现源码

    在实际应用中,可以结合使用这些方法,比如在Controller层处理HTTP请求时使用SpringMVC的注解脱敏,而在日志记录层面利用`Logback`或`Log4j2`的扩展功能进行全局脱敏。 在`desensitization`这个压缩包文件中,可能...

    spring+hibernate+log4j所需要的jar包

    Spring、Hibernate和Log4j是Java开发中三个非常重要的库,它们各自负责不同的领域,而将它们结合在一起,可以构建出强大的企业级应用系统。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和面向切面...

    [简单]log4jdbc-log4j2配置简记

    1. 添加依赖:在项目中引入log4jdbc-log4j2和log4j2的依赖库,通常是在pom.xml文件中添加对应的Maven坐标或在build.gradle文件中添加Gradle依赖。 2. 配置数据源:在应用的配置文件(如Spring的application....

    spring3_junit4.10_log4j

    描述中提到,Spring 3.0需要JUnit 4.5以上的版本,而JUnit 4.10在实际应用中表现良好,同时也使用了Log4j进行日志记录。这些标签 "spring3", "junit4.10", "log4j" 和 "jar" 提供了关键组件的信息,表明这是一个Java...

    springmvc spring3 hibernate4 log4j

    标题中的"springmvc spring3 hibernate4 log4j"代表了一个基于Java的Web开发框架的组合,主要包括Spring MVC、Spring 3、Hibernate 4和Log4j四个关键组件。这四个技术是Java后端开发中非常重要的工具,下面将详细...

    ssh+aop+log4j+日志拦截器+注解

    标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    这里提到的四个关键配置文件——`spring-mvc.xml`、`spring-mybatis.xml`、`web.xml`以及`log4j.properties`,对于一个基于Java的Web应用来说至关重要,特别是使用Spring MVC和MyBatis框架的时候。接下来,我们将...

    springmvc中使用log4j及aop记录日志的例子

    在这个例子中,我们将讨论如何将Log4j与Spring MVC和AOP结合,实现方法调用前后的日志打印。 首先,让我们了解Log4j的基本配置。Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,定义了日志的级别(如DEBUG...

    SpringBoot中使用log4j进行日志管理示例源码

    首先,我们需要在Spring Boot项目的`pom.xml`文件中添加Log4j的依赖。确保你的Maven依赖中有以下内容: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-log4j2 ``` 这个依赖引入了...

    springboot-log4j.zip

    为了将Log4j引入到Spring Boot项目中,我们需要添加相应的依赖。在`pom.xml`文件中,我们需要注释掉Spring Boot默认的日志依赖,并引入Log4j的依赖,如下: ```xml &lt;!-- 取消注释或移除Spring Boot默认的日志依赖 -...

    maven+Springmvc+spring+mybatis+log4j的Demo

    这是一个基于Maven构建的Java Web项目,整合了Spring MVC、Spring、MyBatis以及Log4j四个关键组件,用于实现企业级的三层架构。这个Demo是个人学习与实践的成果,可以帮助初学者或开发者理解如何将这些流行的技术...

Global site tag (gtag.js) - Google Analytics