2012-11-30 10 views
5

Piszę aplikację internetową w Javie i używając SLF4J do logowania.SLF4J, Aby uniknąć zapisu LoggerFactory.getLogger (MyClassName.class) za każdym razem

staję się zmęczony pisząc poniższy wiersz dla każdej klasy, która używa rejestrowania:

private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class); 

Aby uniknąć zbędnych kodów, mam na myśli coś takiego

interface Loggable { 
    Logger logger(); 
} 

a każda klasa może tylko implementuj ten interfejs, a następnie niektóre magiczne elementy, takie jak AOP, wstawiają część LoggerFactory.

Czy ktoś to zaimplementował lub wie, jak to osiągnąć?

Dzięki!

Odpowiedz

12

Czy używasz Zaćmienie? Jeśli tak, to dlaczego nie wystarczy użyć szablonu kod z kluczowych jak „rejestratora” i następujący szablon do niego:

${:import(org.slf4j.LoggerFactory, org.slf4j.Logger)} 
private final static Logger LOGGER = LoggerFactory.getLogger(${enclosing_type}.class); 

ten sposób byłoby po prostu wpisać „rejestrator”, uderzył przesunięcie + przestrzeń i gotowe.

+0

Dokładnie, proste i spełnia swoje zadanie. Wykorzystanie AOP tylko dla tak trywialnego problemu to szalony pomysł IMHO (zwłaszcza jeśli twój projekt nie jest jeszcze skonfigurowany do AOP) –

0

Rejestrowanie za pomocą AOP jest zademonstrowane w Here. Nie ma możliwości, abyśmy mogli dynamicznie wstawiać program rejestrujący do metody, aby rejestrować szczegóły wykonania metody. Przypadki testowe jednostkowe mogą o to zadbać. Rejestrowanie wywołań metod można wykonać pod AOP

Powiązane problemy