使用Spring配置LogBack日志记录

LogBack是由Log4j的同一作者创建的用于记录日志的API(较新的实现,它类似于新版本),在本文中,我将展示如何在Spring项目中对其进行集成和使用。

在本教程中,我假设您正在使用一个简单的Spring ROO项目,该项目将为您准备项目的所有结构,有关更多信息,请参见: http : //www.springsource.org/spring-roo

首先,您需要在src / main / resources中创建logback.xml (保存配置附加程序,如log4j.properprties):


<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>

            <pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern>

        </encoder>

    </appender>

    <logger name="test.myapp.repos">

        <level value="INFO" />

    </logger>

    <logger name="org.springframework">

        <level value="INFO" />

    </logger>

    <root>

        <level value="INFO" />

        <appender-ref ref="CONSOLE" />

    </root>

</configuration>

第二步是配置Maven依赖项并添加LogBack所需的库:

<-- Properties Settings -->

<properties>

    <roo.version>1.1.0.RELEASE</roo.version>

    <spring.version>3.0.5.RELEASE</spring.version>

    <aspectj.version>1.6.10</aspectj.version>

    <slf4j.version>1.6.1</slf4j.version>

    <logback.version>0.9.26</logback.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 </properties>

<-- Dependencies Settings -->

<dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-api</artifactId>

    <version>${slf4j.version}</version>

</dependency>

<dependency>

    <groupId>log4j</groupId>

    <artifactId>log4j</artifactId>

    <version>1.2.16</version>

</dependency>

<dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>jcl-over-slf4j</artifactId>

    <version>${slf4j.version}</version>

</dependency>

<dependency>

    <groupId>ch.qos.logback</groupId>

    <artifactId>logback-classic</artifactId>

    <version>${logback.version}</version>

</dependency>

<dependency>

    <groupId>ch.qos.logback</groupId>

    <artifactId>logback-core</artifactId>

    <version>${logback.version}</version>

</dependency>

<dependency>

    <groupId>ch.qos.logback</groupId>

    <artifactId>logback-access</artifactId>

    <version>${logback.version}</version>

</dependency>

您需要摆脱由Spring ROO生成的Maven pom.xml中的所有Log4j依赖关系,在添加提供的用于设置LogBack的代码之前,清除与日志记录相关的每个依赖关系。

为了在正在开发的类上使用记录器,您需要创建它的静态实例并在使用Log4J时正常使用,唯一的区别是LogBack与Log4j的实现和配置代码。 在Logback.xml上,必须扫描您的类以使记录器正常工作。

package test.myapp.repos; /*This package figures on LogBack.xml*/

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class MyTestClass {

    static Logger logger = LoggerFactory.getLogger(ItemController.class);

    ...

    public void create(String args) {

        logger.debug("My Args Is => " + args);

    }

    ...

}
还有另一种将记录器注入Spring Bean的复杂方法,这可以通过开发自定义BeanPostProcessor来实现,该方法将自动将Logger注入带有@Log的字段(这是我们创建的自定义注释),而不是手动实例化如前所述的记录器。
/** Custom @Logger annotation **/

@Retention(RUNTIME)

@Target(FIELD)

@Documented

public @interface Log { }

/** LoggerPostProcessor => Custom Spring BeanPostProcessor **/

public class LoggerPostProcessor implements BeanPostProcessor {

    public Object postProcessAfterInitialization(Object bean, String beanName) throws

        BeansException {

        return bean;

    }

    public Object postProcessBeforeInitialization(final Object bean, String beanName)

          throws BeansException {

        ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {

                @SuppressWarnings("unchecked")

                public void doWith(Field field) throws IllegalArgumentException,

                    IllegalAccessException {

                    ReflectionUtils.makeAccessible(field);

                    //Check if the field is annoted with @Log

                    if (field.getAnnotation(Log.class) != null) {

                        Log logAnnotation = field.getAnnotation(Log.class);

                        Logger logger = LoggerFactory.getLogger(bean.getClass());

                        field.set(bean, logger);

                    }

                }

        });

        return bean;

    }

}

/** Usage on a Spring Bean **/

@Component

public class MyBeanImpl implements MyBean {

    /** Not manual set up code **/

    @Log Logger myLogger;

    ...

}

最后要做的是在您的applicationContext.xml文件中声明这个新的BeanPostProcessor:

<!-- The Logger Injector -->

<bean id="LogginInjector" class="ma.oncf.achat.utils.LoggerPostProcessor" />

有关为什么切换到LogBack的更多信息,请参阅: 为什么切换到LogBack

参考:来自Fancy UI博客的JCG合作伙伴 Idriss Mrabti使用Spring配置LogBack Logging

相关文章 :


翻译自: https://www.javacodegeeks.com/2011/12/configure-logback-logging-with-spring.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值