Lors de la sortie de Log en Java, utilisez des bibliothèques telles que Log4j et Logback, ou utilisez java.util.logging. La plupart des bibliothèques et API obtiennent et génèrent des instances de Logger comme suit.
Logger logger = Logger.getLogger(Hoge.class);
Les écrire dans chaque classe est un problème. Trouvons un moyen plus simple d'écrire avec Spring.
C'est presque une introduction à la mise en œuvre de ce site. http://memorynotfound.com/spring-inject-logger-annotation-example/
Je vous remercie.
Si vous utilisez Spring, vous pouvez injecter Logger dans le fichier annoté comme suit:
@Log
private static Logger logger;
La quantité de description est petite, mais il n'est pas nécessaire de spécifier la classe de l'argument, vous pouvez donc éliminer l'erreur de Logger (ce qui devrait parfois être fait par copie).
Je vais vous expliquer comment le mettre en œuvre.
Créez une annotation de journal comme indiqué ci-dessous.
Log.java
@Retention(RUNTIME)
@Target(FIELD)
@Documented
public @interface Log {
}
Puisqu'il est référencé à l'exécution, il s'agit de «@Retention (RUNTIME)», et comme la cible est un champ, c'est «@Target (FIELD)».
LogInjector
En utilisant Spring, écrivez le code pour injecter le Logger dans le champ avec l'annotation @ Log
créée précédemment.
Créez une implémentation BeanPostProcessor pour Spring comme indiqué ci-dessous et créez-y un Logger.
@Component
public class LogInjector implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessBeforeInitialization(final Object bean, String name) throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(), new ReflectionUtils.FieldCallback() {
public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
// make the field accessible if defined private
ReflectionUtils.makeAccessible(field);
if (field.getAnnotation(Log.class) != null) {
Logger log = Logger.getLogger(bean.getClass());
field.set(bean, log);
}
}
});
return bean;
}
}
Vous êtes maintenant prêt. Après cela, vous pouvez l'utiliser en suivant les étapes ci-dessous.
@ Log
au champ statique de la classe que vous souhaitez injecter Logger.Désormais, vous n'avez plus besoin de faire getLogger
à chaque fois.
Recommended Posts