added LoggerController class
This commit is contained in:
60
src/main/java/net/woggioni/jwo/LoggerController.java
Normal file
60
src/main/java/net/woggioni/jwo/LoggerController.java
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
package net.woggioni.jwo;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.slf4j.event.LoggingEvent;
|
||||||
|
import org.slf4j.event.SubstituteLoggingEvent;
|
||||||
|
import org.slf4j.helpers.SubstituteLogger;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Queue;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class LoggerController {
|
||||||
|
|
||||||
|
private static final Object lock = new Object();
|
||||||
|
|
||||||
|
private static boolean initialized = false;
|
||||||
|
private static final Queue<SubstituteLoggingEvent> eventQueue = new LinkedBlockingQueue<>();
|
||||||
|
private static final List<SubstituteLogger> substituteLoggers = new ArrayList<>();
|
||||||
|
|
||||||
|
public static Logger lazyLogger(String className) {
|
||||||
|
synchronized (lock) {
|
||||||
|
Logger result;
|
||||||
|
if (initialized) {
|
||||||
|
result = LoggerFactory.getLogger(className);
|
||||||
|
} else {
|
||||||
|
SubstituteLogger substituteLogger = new SubstituteLogger(className, eventQueue, false);
|
||||||
|
substituteLoggers.add(substituteLogger);
|
||||||
|
result = substituteLogger;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Logger lazyLogger(Class<?> cls) {
|
||||||
|
return lazyLogger(cls.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initializeLoggers() {
|
||||||
|
synchronized (lock) {
|
||||||
|
SubstituteLogger firstLogger = null;
|
||||||
|
for (SubstituteLogger log : substituteLoggers) {
|
||||||
|
if (firstLogger == null) firstLogger = log;
|
||||||
|
Logger realLogger = LoggerFactory.getLogger(log.getName());
|
||||||
|
log.setDelegate(realLogger);
|
||||||
|
}
|
||||||
|
if (firstLogger != null) {
|
||||||
|
for (LoggingEvent evt : eventQueue) {
|
||||||
|
firstLogger.log(evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user