Log

来源:互联网 发布:旅行团乐队知乎 编辑:程序博客网 时间:2024/05/19 14:19
log4j 1.2.x:PropertyConfigurator.configure("");${:import(org.apache.log4j.Logger,java.lang.invoke.MethodHandles)}private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass());log4j 2.x:Configurator.initialize(null);${:import(org.apache.logging.log4j.Logger,org.apache.logging.log4j.LogManager,java.lang.invoke.MethodHandles)}private static final Logger logger = LogManager.getLogger(MethodHandles.lookup().lookupClass());slf4j${:import(org.slf4j.Logger,org.slf4j.LoggerFactory,java.lang.invoke.MethodHandles)}private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass());private static final Logger logger = LogManager.getLogger(MethodHandles.lookup().lookupClass());private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); 


slf4j,@see http://glauche.de/2009/08/24/logging-with-slf4j-and-guice/

import java.lang.annotation.Target;import java.lang.annotation.Retention;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.RetentionPolicy.RUNTIME;@Target({FIELD})@Retention(RUNTIME)public @interface Log {}import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.lang.reflect.Field;import com.google.inject.MembersInjector;public class Slf4jMembersInjector<T>  implements MembersInjector<T> {    private final Field field;    private final Logger logger;        Slf4jMembersInjector(Field aField) {    field = aField;    logger = LoggerFactory.getLogger(field.getDeclaringClass());    field.setAccessible(true);    }      public void injectMembers(T instance) {try {field.set(instance,logger);} catch (IllegalAccessException e) {throw new RuntimeException(e);}   }}import org.slf4j.Logger;import java.lang.reflect.Field;import com.google.inject.TypeLiteral;import com.google.inject.spi.TypeListener;import com.google.inject.spi.TypeEncounter;public class Slf4jTypeListener implements TypeListener {public <I> void hear(TypeLiteral<I> typeLiteral,TypeEncounter<I> typeEncounter) {for (Field field : typeLiteral.getRawType().getDeclaredFields()) {if (field.getType() == Logger.class && field.isAnnotationPresent(Log.class)) {                typeEncounter.register(new Slf4jMembersInjector<I>(field));                }}}}import com.google.inject.AbstractModule;import com.google.inject.matcher.Matchers;public class Module extends AbstractModule {protected void configure() {                 bindListener(Matchers.any(),new Slf4jTypeListener());        }    }@Log Logger log;public void testLog(boolean magicNumIndex){StackTraceElement[] steArr = Thread.currentThread().getStackTrace();StackTraceElement ste = magicNumIndex ? steArr[1] : steArr[2];log.info("className:{},fileName:{},methodName:{},lineNumber:{}",ste.getClassName(),ste.getFileName(),ste.getMethodName(),ste.getLineNumber());}

0 0
原创粉丝点击