Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java (wersja 0)
- @@ -0,0 +1,9 @@
- +package pl.koziolekweb.loggerservice;
- +
- +public class AutoDetectAdapter implements LoggerFactoryAdapter<Object> {
- + public Object getLogger( Class< ? > fieldType, Object... factoryArguments ) {
- + LoggerFactoryAdapter< ? > loggerFactoryAdapter = AutoDetectRegistry.getAdapter( fieldType );
- + return loggerFactoryAdapter.getLogger( fieldType,
- + factoryArguments );
- + }
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java (wersja 0)
- @@ -0,0 +1,20 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import java.util.HashMap;
- +import java.util.Map;
- +
- +public class AutoDetectRegistry {
- + private final static Map<String, LoggerFactoryAdapter< ? >> adapterMap = new HashMap<String, LoggerFactoryAdapter< ? >>();
- +
- + public static void registerAdapter( Class< ? > loggerClass, LoggerFactoryAdapter< ? > adapter ) {
- + adapterMap.put( loggerClass.getName(),
- + adapter );
- + }
- +
- + public static LoggerFactoryAdapter< ? > getAdapter( Class< ? > loggerClass ) {
- + LoggerFactoryAdapter< ? > loggerFactoryAdapter = adapterMap.get( loggerClass.getName() );
- + if ( loggerFactoryAdapter == null )
- + throw new RuntimeException( "unable to find logger adapter for " + loggerClass.getName() );
- + return loggerFactoryAdapter;
- + }
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java (wersja 0)
- @@ -0,0 +1,16 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import java.lang.annotation.Documented;
- +import java.lang.annotation.ElementType;
- +import java.lang.annotation.Retention;
- +import java.lang.annotation.RetentionPolicy;
- +import java.lang.annotation.Target;
- +
- +
- +@Retention(RetentionPolicy.RUNTIME)
- +@Target(ElementType.FIELD)
- +@Documented
- +@LogService(loggerFactoryAdapterClass = AutoDetectAdapter.class)
- +public @interface AutoLogger {
- +
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java (kopia robocza)
- @@ -1,8 +1,11 @@
- package pl.koziolekweb.loggerservice;
- public final class CommonsAdapter implements LoggerFactoryAdapter<org.apache.commons.logging.Log> {
- -
- - public org.apache.commons.logging.Log getLogger(Object... factoryArguments) {
- + static {
- + AutoDetectRegistry.registerAdapter( org.apache.commons.logging.Log.class, new CommonsAdapter() );
- + }
- +
- + public org.apache.commons.logging.Log getLogger(Class<?> fieldType, Object... factoryArguments) {
- org.apache.commons.logging.Log logger = null;
- if (factoryArguments.length <= 0)
- logger = org.apache.commons.logging.LogFactory.getLog(Object.class);
- Index: src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java (wersja 0)
- @@ -0,0 +1,15 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import java.lang.annotation.Documented;
- +import java.lang.annotation.ElementType;
- +import java.lang.annotation.Retention;
- +import java.lang.annotation.RetentionPolicy;
- +import java.lang.annotation.Target;
- +
- +@Retention(RetentionPolicy.RUNTIME)
- +@Target(ElementType.FIELD)
- +@Documented
- +@LogService(loggerFactoryAdapterClass = CommonsAdapter.class)
- +public @interface CommonsLogger {
- +
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java (kopia robocza)
- @@ -1,8 +1,11 @@
- package pl.koziolekweb.loggerservice;
- public final class JavaSeAdapter implements LoggerFactoryAdapter<java.util.logging.Logger> {
- + static {
- + AutoDetectRegistry.registerAdapter( java.util.logging.Logger.class, new JavaSeAdapter() );
- + }
- - public java.util.logging.Logger getLogger(Object... factoryArguments) {
- + public java.util.logging.Logger getLogger(Class<?> fieldType, Object... factoryArguments) {
- java.util.logging.Logger logger = null;
- if (factoryArguments.length <= 0)
- logger = java.util.logging.Logger.getLogger("");
- Index: src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java (wersja 0)
- @@ -0,0 +1,15 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import java.lang.annotation.Documented;
- +import java.lang.annotation.ElementType;
- +import java.lang.annotation.Retention;
- +import java.lang.annotation.RetentionPolicy;
- +import java.lang.annotation.Target;
- +
- +@Retention(RetentionPolicy.RUNTIME)
- +@Target(ElementType.FIELD)
- +@Documented
- +@LogService(loggerFactoryAdapterClass = JavaSeAdapter.class)
- +public @interface JavaSeLogger {
- +
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java (kopia robocza)
- @@ -1,15 +1,21 @@
- package pl.koziolekweb.loggerservice;
- +import org.apache.log4j.Logger;
- +
- public final class Log4jAdapter implements LoggerFactoryAdapter<org.apache.log4j.Logger> {
- + static {
- + AutoDetectRegistry.registerAdapter( Logger.class,
- + new Log4jAdapter() );
- + }
- - public org.apache.log4j.Logger getLogger(Object... factoryArguments) {
- + public org.apache.log4j.Logger getLogger( Class< ? > fieldType, Object... factoryArguments ) {
- org.apache.log4j.Logger logger = null;
- - if (factoryArguments.length <= 0)
- - logger = org.apache.log4j.Logger.getLogger(Object.class);
- - if (factoryArguments[0] instanceof Class)
- - logger = org.apache.log4j.Logger.getLogger((Class<?>) factoryArguments[0]);
- - if (factoryArguments[0] instanceof String)
- - logger = org.apache.log4j.Logger.getLogger(factoryArguments[0].toString());
- + if ( factoryArguments.length <= 0 )
- + logger = org.apache.log4j.Logger.getLogger( Object.class );
- + if ( factoryArguments[ 0 ] instanceof Class )
- + logger = org.apache.log4j.Logger.getLogger( (Class< ? >) factoryArguments[ 0 ] );
- + if ( factoryArguments[ 0 ] instanceof String )
- + logger = org.apache.log4j.Logger.getLogger( factoryArguments[ 0 ].toString() );
- return logger;
- }
- Index: src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java (wersja 0)
- +++ src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java (wersja 0)
- @@ -0,0 +1,14 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import java.lang.annotation.Documented;
- +import java.lang.annotation.ElementType;
- +import java.lang.annotation.Retention;
- +import java.lang.annotation.RetentionPolicy;
- +import java.lang.annotation.Target;
- +
- +@Retention(RetentionPolicy.RUNTIME)
- +@Target(ElementType.FIELD)
- +@Documented
- +@LogService(loggerFactoryAdapterClass = Log4jAdapter.class)
- +public @interface Log4jLogger {
- +}
- Index: src/main/java/pl/koziolekweb/loggerservice/LogService.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/LogService.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/LogService.java (kopia robocza)
- @@ -7,7 +7,7 @@
- import java.lang.annotation.Target;
- @Retention(RetentionPolicy.RUNTIME)
- -@Target(ElementType.FIELD)
- +@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE })
- @Documented
- public @interface LogService {
- Index: src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java (kopia robocza)
- @@ -1,6 +1,8 @@
- package pl.koziolekweb.loggerservice;
- +import java.lang.annotation.Annotation;
- import java.lang.reflect.Field;
- +import java.util.Arrays;
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.config.BeanPostProcessor;
- @@ -18,11 +20,22 @@
- ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
- public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
- LogService logServiceAnnotation = field.getAnnotation(LogService.class);
- +
- + if ( logServiceAnnotation == null ) {
- + Annotation[] annotations = field.getAnnotations();
- + for ( int i = 0; i < annotations.length; ++i ) {
- + Annotation a = annotations[ i ];
- + Class<? extends Annotation> annotationType = a.annotationType();
- + logServiceAnnotation = annotationType.getAnnotation( LogService.class );
- + if ( logServiceAnnotation != null )
- + break;
- + }
- + }
- +
- if (logServiceAnnotation != null) {
- try {
- Class<LoggerFactoryAdapter<Object>> loggerFactoryAdapterClass = null;
- if (logServiceAnnotation.loggerFactoryAdapterClass().equals(Void.class)) {
- - Class<LoggerFactoryAdapter> loggerFactoryAdapterClassLoader = LoggerFactoryAdapter.class;
- loggerFactoryAdapterClass = (Class<LoggerFactoryAdapter<Object>>) Class
- .forName(logServiceAnnotation.loggerFactoryAdapterClassName());
- } else {
- @@ -30,7 +43,7 @@
- .loggerFactoryAdapterClass();
- }
- LoggerFactoryAdapter<Object> newInstance = loggerFactoryAdapterClass.newInstance();
- - setLogger(bean, field, newInstance.getLogger(bean.getClass()));
- + setLogger(bean, field, newInstance.getLogger(field.getType(), bean.getClass()));
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- Index: src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java (kopia robocza)
- @@ -2,6 +2,5 @@
- public interface LoggerFactoryAdapter<T> {
- -
- - public T getLogger(Object... factoryArguments);
- + public T getLogger(Class<?> fieldType, Object... factoryArguments);
- }
- Index: src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java (kopia robocza)
- @@ -1,15 +0,0 @@
- -package pl.koziolekweb.loggerservice;
- -
- -public final class Sfl4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
- -
- - public org.slf4j.Logger getLogger(Object... factoryArguments) {
- - org.slf4j.Logger logger = null;
- - if (factoryArguments.length <= 0)
- - logger = org.slf4j.LoggerFactory.getLogger(Object.class);
- - if (factoryArguments[0] instanceof Class)
- - logger = org.slf4j.LoggerFactory.getLogger((Class<?>) factoryArguments[0]);
- - if (factoryArguments[0] instanceof String)
- - logger = org.slf4j.LoggerFactory.getLogger(factoryArguments[0].toString());
- - return logger;
- - }
- -}
- \ No newline at end of file
- Index: src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java
- ===================================================================
- --- src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java (wersja 24)
- +++ src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java (kopia robocza)
- @@ -1,15 +1,19 @@
- package pl.koziolekweb.loggerservice;
- -public final class Sfl4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
- +public final class Slf4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
- + static {
- + AutoDetectRegistry.registerAdapter( org.slf4j.Logger.class,
- + new Slf4jAdapter() );
- + }
- - public org.slf4j.Logger getLogger(Object... factoryArguments) {
- + public org.slf4j.Logger getLogger( Class< ? > fieldType, Object... factoryArguments ) {
- org.slf4j.Logger logger = null;
- - if (factoryArguments.length <= 0)
- - logger = org.slf4j.LoggerFactory.getLogger(Object.class);
- - if (factoryArguments[0] instanceof Class)
- - logger = org.slf4j.LoggerFactory.getLogger((Class<?>) factoryArguments[0]);
- - if (factoryArguments[0] instanceof String)
- - logger = org.slf4j.LoggerFactory.getLogger(factoryArguments[0].toString());
- + if ( factoryArguments.length <= 0 )
- + logger = org.slf4j.LoggerFactory.getLogger( Object.class );
- + if ( factoryArguments[ 0 ] instanceof Class )
- + logger = org.slf4j.LoggerFactory.getLogger( (Class< ? >) factoryArguments[ 0 ] );
- + if ( factoryArguments[ 0 ] instanceof String )
- + logger = org.slf4j.LoggerFactory.getLogger( factoryArguments[ 0 ].toString() );
- return logger;
- }
- }
- \ No newline at end of file
- Index: src/test/java/pl/koziolekweb/loggerservice/AutoBean.java
- ===================================================================
- --- src/test/java/pl/koziolekweb/loggerservice/AutoBean.java (wersja 0)
- +++ src/test/java/pl/koziolekweb/loggerservice/AutoBean.java (wersja 0)
- @@ -0,0 +1,28 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import org.apache.commons.logging.Log;
- +import org.apache.log4j.Logger;
- +
- +
- +public class AutoBean {
- + @AutoLogger
- + private Logger loggerLog4j;
- +
- + @AutoLogger
- + private Log loggerCommons;
- +
- + @AutoLogger
- + private org.slf4j.Logger loggerSlf4j;
- +
- + public Logger getLoggerLog4j() {
- + return loggerLog4j;
- + }
- +
- + public Log getLoggerCommons() {
- + return loggerCommons;
- + }
- +
- + public org.slf4j.Logger getLoggerSlf4j() {
- + return loggerSlf4j;
- + }
- +}
- \ No newline at end of file
- Index: src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java
- ===================================================================
- --- src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java (wersja 0)
- +++ src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java (wersja 0)
- @@ -0,0 +1,15 @@
- +package pl.koziolekweb.loggerservice;
- +
- +import org.apache.log4j.Logger;
- +
- +
- +public class Log4jLogBeanSimple {
- +
- + @Log4jLogger
- + private Logger logger;
- +
- + public Logger getLogger() {
- + return logger;
- + }
- +
- +}
- \ No newline at end of file
- Index: src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java
- ===================================================================
- --- src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java (wersja 24)
- +++ src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java (kopia robocza)
- @@ -1,7 +1,6 @@
- package pl.koziolekweb.loggerservice;
- import static org.testng.Assert.assertNotNull;
- -
- import static org.testng.Assert.assertSame;
- import static org.testng.Assert.fail;
- @@ -30,6 +29,8 @@
- testSfl4J();
- testCommons();
- testLog4j();
- + testLog4jSimple();
- + testAuto();
- }
- @Test(expectedExceptions = { BeansException.class })
- @@ -48,6 +49,32 @@
- }
- @Test
- + public void testLog4jSimple() {
- + Log4jLogBeanSimple log4jBean = new Log4jLogBeanSimple();
- + logServicePostProcessor.postProcessBeforeInitialization(log4jBean, "");
- + assertNotNull(log4jBean.getLogger());
- + }
- +
- + @Test
- + public void testAuto() {
- + // TODO jak to scierwo automatycznie zaladowac?
- + try {
- + Class.forName( Log4jAdapter.class.getName() );
- + Class.forName( CommonsAdapter.class.getName() );
- + Class.forName( Slf4jAdapter.class.getName() );
- + Class.forName( JavaSeAdapter.class.getName() );
- + } catch ( ClassNotFoundException e ) {
- + throw new RuntimeException( "e" );
- + }
- +
- + AutoBean bean = new AutoBean();
- + logServicePostProcessor.postProcessBeforeInitialization(bean, "");
- + assertNotNull(bean.getLoggerLog4j());
- + assertNotNull(bean.getLoggerCommons());
- + assertNotNull(bean.getLoggerSlf4j());
- + }
- +
- + @Test
- public void testCommons() {
- CommonsLogBean commonsBean = new CommonsLogBean();
- logServicePostProcessor.postProcessBeforeInitialization(commonsBean, "");
- Index: src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java
- ===================================================================
- --- src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java (wersja 24)
- +++ src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java (kopia robocza)
- @@ -4,7 +4,7 @@
- public class Sfl4jLogBean {
- - @LogService(loggerFactoryAdapterClassName = "pl.koziolekweb.loggerservice.Sfl4jAdapter")
- + @LogService(loggerFactoryAdapterClassName = "pl.koziolekweb.loggerservice.Slf4jAdapter")
- public Logger logger;
- private Object someField;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement