X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fosgi%2FCmsOsgiLogger.java;h=85f045bae660b6783d2aa4448e7fdce59af327e1;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=91628d344e3879edb6103bf7d70a7401a93ccc20;hpb=6862cee138ca8ed2bbf6427b20b389a56b5df32f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsOsgiLogger.java b/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsOsgiLogger.java index 91628d344..85f045bae 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsOsgiLogger.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/osgi/CmsOsgiLogger.java @@ -1,37 +1,11 @@ package org.argeo.cms.internal.osgi; -import java.io.IOException; -import java.net.URI; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardWatchEventKinds; -import java.nio.file.WatchEvent; -import java.nio.file.WatchKey; -import java.nio.file.WatchService; import java.security.SignatureException; -import java.util.ArrayList; -import java.util.Collections; import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Properties; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; import org.argeo.api.cms.CmsConstants; import org.argeo.api.cms.CmsLog; -import org.argeo.cms.ArgeoLogListener; -import org.argeo.cms.ArgeoLogger; -import org.argeo.cms.CmsException; -import org.argeo.cms.auth.CurrentUser; -import org.argeo.cms.internal.runtime.KernelConstants; -import org.argeo.cms.internal.runtime.KernelUtils; -import org.argeo.osgi.useradmin.UserAdminConf; +import org.argeo.cms.runtime.DirectoryConf; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; @@ -41,48 +15,49 @@ import org.osgi.service.log.LogLevel; import org.osgi.service.log.LogListener; import org.osgi.service.log.LogReaderService; -/** Not meant to be used directly in standard log4j config */ -public class CmsOsgiLogger implements ArgeoLogger, LogListener { - /** Internal debug for development purposes. */ - private static Boolean debug = false; +/** Logs OSGi events. */ +public class CmsOsgiLogger implements LogListener { + private final static String WHITEBOARD_PATTERN_PROP = "osgi.http.whiteboard.servlet.pattern"; + private final static String CONTEXT_NAME_PROP = "contextName"; + + private LogReaderService logReaderService; - private Boolean disabled = false; +// /** Internal debug for development purposes. */ +// private static Boolean debug = false; - private String level = null; +// private Boolean disabled = false; +// +// private String level = null; // private Level log4jLevel = null; - private Properties configuration; - - private AppenderImpl appender; - - private final List everythingListeners = Collections - .synchronizedList(new ArrayList()); - private final List allUsersListeners = Collections - .synchronizedList(new ArrayList()); - private final Map> userListeners = Collections - .synchronizedMap(new HashMap>()); +// private Properties configuration; - private BlockingQueue events; - private LogDispatcherThread logDispatcherThread = new LogDispatcherThread(); +// private AppenderImpl appender; - private Integer maxLastEventsCount = 10 * 1000; +// private BlockingQueue events; +// private LogDispatcherThread logDispatcherThread = new LogDispatcherThread(); - /** Marker to prevent stack overflow */ - private ThreadLocal dispatching = new ThreadLocal() { +// private Integer maxLastEventsCount = 10 * 1000; +// +// /** Marker to prevent stack overflow */ +// private ThreadLocal dispatching = new ThreadLocal() { +// +// @Override +// protected Boolean initialValue() { +// return false; +// } +// }; - @Override - protected Boolean initialValue() { - return false; - } - }; +// public CmsOsgiLogger(LogReaderService lrs) { +// } - public CmsOsgiLogger(LogReaderService lrs) { - if (lrs != null) { - Enumeration logEntries = lrs.getLog(); + public void start() { + if (logReaderService != null) { + Enumeration logEntries = logReaderService.getLog(); while (logEntries.hasMoreElements()) logged(logEntries.nextElement()); - lrs.addLogListener(this); + logReaderService.addLogListener(this); // configure log4j watcher // String log4jConfiguration = KernelUtils.getFrameworkProp("log4j.configuration"); @@ -106,43 +81,31 @@ public class CmsOsgiLogger implements ArgeoLogger, LogListener { // } // } } +// try { +//// events = new LinkedBlockingQueue(); +//// +//// // if (layout != null) +//// // setLayout(layout); +//// // else +//// // setLayout(new PatternLayout(pattern)); +////// appender = new AppenderImpl(); +//// reloadConfiguration(); +////// Logger.getRootLogger().addAppender(appender); +//// +//// logDispatcherThread = new LogDispatcherThread(); +//// logDispatcherThread.start(); +// } catch (Exception e) { +// throw new IllegalStateException("Cannot initialize log4j"); +// } } - public void init() { - try { - events = new LinkedBlockingQueue(); - - // if (layout != null) - // setLayout(layout); - // else - // setLayout(new PatternLayout(pattern)); - appender = new AppenderImpl(); - reloadConfiguration(); -// Logger.getRootLogger().addAppender(appender); - - logDispatcherThread = new LogDispatcherThread(); - logDispatcherThread.start(); - } catch (Exception e) { - throw new CmsException("Cannot initialize log4j"); - } - } - - public void destroy() throws Exception { -// Logger.getRootLogger().removeAppender(appender); - allUsersListeners.clear(); - for (List lst : userListeners.values()) - lst.clear(); - userListeners.clear(); - - events.clear(); - events = null; - logDispatcherThread.interrupt(); + public void stop() throws Exception { +// events.clear(); +// events = null; +// logDispatcherThread.interrupt(); + logReaderService.removeLogListener(this); } - // public void setLayout(Layout layout) { - // this.layout = layout; - // } - public String toString() { return "Node Logger"; } @@ -160,10 +123,13 @@ public class CmsOsgiLogger implements ArgeoLogger, LogListener { return; pluginLog.error(msg(status), status.getException()); } else if (severity.equals(LogLevel.WARN) && pluginLog.isWarnEnabled()) { - if (pluginLog.isTraceEnabled()) - pluginLog.warn(msg(status), status.getException()); - else + if ("org.apache.felix.scr".equals(status.getBundle().getSymbolicName()) + && (status.getException() != null && status.getException() instanceof InterruptedException)) { + // do not print stacktraces by Felix SCR shutdown pluginLog.warn(msg(status)); + } else { + pluginLog.warn(msg(status), status.getException()); + } } else if (severity.equals(LogLevel.INFO) && pluginLog.isDebugEnabled()) pluginLog.debug(msg(status), status.getException()); else if (severity.equals(LogLevel.DEBUG) && pluginLog.isTraceEnabled()) @@ -203,24 +169,23 @@ public class CmsOsgiLogger implements ArgeoLogger, LogListener { // sb.append(" " + Constants.SERVICE_PID + ": " + servicePid); // } // servlets - Object whiteBoardPattern = sr.getProperty(KernelConstants.WHITEBOARD_PATTERN_PROP); + Object whiteBoardPattern = sr.getProperty(WHITEBOARD_PATTERN_PROP); if (whiteBoardPattern != null) { if (whiteBoardPattern instanceof String) { - sb.append(" " + KernelConstants.WHITEBOARD_PATTERN_PROP + ": " + whiteBoardPattern); + sb.append(" " + WHITEBOARD_PATTERN_PROP + ": " + whiteBoardPattern); } else { - sb.append(" " + KernelConstants.WHITEBOARD_PATTERN_PROP + ": " - + arrayToString((String[]) whiteBoardPattern)); + sb.append(" " + WHITEBOARD_PATTERN_PROP + ": " + arrayToString((String[]) whiteBoardPattern)); } } // RWT - Object contextName = sr.getProperty(KernelConstants.CONTEXT_NAME_PROP); + Object contextName = sr.getProperty(CONTEXT_NAME_PROP); if (contextName != null) - sb.append(" " + KernelConstants.CONTEXT_NAME_PROP + ": " + contextName); + sb.append(" " + CONTEXT_NAME_PROP + ": " + contextName); // user directories - Object baseDn = sr.getProperty(UserAdminConf.baseDn.name()); + Object baseDn = sr.getProperty(DirectoryConf.baseDn.name()); if (baseDn != null) - sb.append(" " + UserAdminConf.baseDn.name() + ": " + baseDn); + sb.append(" " + DirectoryConf.baseDn.name() + ": " + baseDn); } return sb.toString(); @@ -247,295 +212,300 @@ public class CmsOsgiLogger implements ArgeoLogger, LogListener { return false; } + public void setLogReaderService(LogReaderService logReaderService) { + this.logReaderService = logReaderService; + } + + // // ARGEO LOGGER // - public synchronized void register(ArgeoLogListener listener, Integer numberOfPreviousEvents) { - String username = CurrentUser.getUsername(); - if (username == null) - throw new CmsException("Only authenticated users can register a log listener"); - - if (!userListeners.containsKey(username)) { - List lst = Collections.synchronizedList(new ArrayList()); - userListeners.put(username, lst); - } - userListeners.get(username).add(listener); - List lastEvents = logDispatcherThread.getLastEvents(username, numberOfPreviousEvents); - for (LogEvent evt : lastEvents) - dispatchEvent(listener, evt); - } - - public synchronized void registerForAll(ArgeoLogListener listener, Integer numberOfPreviousEvents, - boolean everything) { - if (everything) - everythingListeners.add(listener); - else - allUsersListeners.add(listener); - List lastEvents = logDispatcherThread.getLastEvents(null, numberOfPreviousEvents); - for (LogEvent evt : lastEvents) - if (everything || evt.getUsername() != null) - dispatchEvent(listener, evt); - } - - public synchronized void unregister(ArgeoLogListener listener) { - String username = CurrentUser.getUsername(); - if (username == null)// FIXME - return; - if (!userListeners.containsKey(username)) - throw new IllegalStateException("No user listeners " + listener + " registered for user " + username); - if (!userListeners.get(username).contains(listener)) - throw new IllegalStateException("No user listeners " + listener + " registered for user " + username); - userListeners.get(username).remove(listener); - if (userListeners.get(username).isEmpty()) - userListeners.remove(username); - - } - - public synchronized void unregisterForAll(ArgeoLogListener listener) { - everythingListeners.remove(listener); - allUsersListeners.remove(listener); - } - - /** For development purpose, since using regular logging is not easy here */ - private static void stdOut(Object obj) { - System.out.println(obj); - } - - private static void stdErr(Object obj) { - System.err.println(obj); - } - - private static void debug(Object obj) { - if (debug) - System.out.println(obj); - } - - private static boolean isInternalDebugEnabled() { - return debug; - } +// public synchronized void register(ArgeoLogListener listener, Integer numberOfPreviousEvents) { +// String username = CurrentUser.getUsername(); +// if (username == null) +// throw new IllegalStateException("Only authenticated users can register a log listener"); +// +// if (!userListeners.containsKey(username)) { +// List lst = Collections.synchronizedList(new ArrayList()); +// userListeners.put(username, lst); +// } +// userListeners.get(username).add(listener); +// List lastEvents = logDispatcherThread.getLastEvents(username, numberOfPreviousEvents); +// for (LogEvent evt : lastEvents) +// dispatchEvent(listener, evt); +// } +// +// public synchronized void registerForAll(ArgeoLogListener listener, Integer numberOfPreviousEvents, +// boolean everything) { +// if (everything) +// everythingListeners.add(listener); +// else +// allUsersListeners.add(listener); +// List lastEvents = logDispatcherThread.getLastEvents(null, numberOfPreviousEvents); +// for (LogEvent evt : lastEvents) +// if (everything || evt.getUsername() != null) +// dispatchEvent(listener, evt); +// } +// +// public synchronized void unregister(ArgeoLogListener listener) { +// String username = CurrentUser.getUsername(); +// if (username == null)// FIXME +// return; +// if (!userListeners.containsKey(username)) +// throw new IllegalStateException("No user listeners " + listener + " registered for user " + username); +// if (!userListeners.get(username).contains(listener)) +// throw new IllegalStateException("No user listeners " + listener + " registered for user " + username); +// userListeners.get(username).remove(listener); +// if (userListeners.get(username).isEmpty()) +// userListeners.remove(username); +// +// } +// +// public synchronized void unregisterForAll(ArgeoLogListener listener) { +// everythingListeners.remove(listener); +// allUsersListeners.remove(listener); +// } + +// /** For development purpose, since using regular logging is not easy here */ +// private static void stdOut(Object obj) { +// System.out.println(obj); +// } +// +// private static void stdErr(Object obj) { +// System.err.println(obj); +// } +// +// private static void debug(Object obj) { +// if (debug) +// System.out.println(obj); +// } +// +// private static boolean isInternalDebugEnabled() { +// return debug; +// } // public void setPattern(String pattern) { // this.pattern = pattern; // } - public void setDisabled(Boolean disabled) { - this.disabled = disabled; - } - - public void setLevel(String level) { - this.level = level; - } - - public void setConfiguration(Properties configuration) { - this.configuration = configuration; - } - - public void updateConfiguration(Properties configuration) { - setConfiguration(configuration); - reloadConfiguration(); - } - - public Properties getConfiguration() { - return configuration; - } - - /** - * Reloads configuration (if the configuration {@link Properties} is set) - */ - protected void reloadConfiguration() { - if (configuration != null) { -// LogManager.resetConfiguration(); -// PropertyConfigurator.configure(configuration); - } - } - - protected synchronized void processLoggingEvent(LogEvent event) { - if (disabled) - return; - - if (dispatching.get()) - return; - - if (level != null && !level.trim().equals("")) { -// if (log4jLevel == null || !log4jLevel.toString().equals(level)) -// try { -// log4jLevel = Level.toLevel(level); -// } catch (Exception e) { -// System.err.println("Log4j level could not be set for level '" + level + "', resetting it to null."); -// e.printStackTrace(); -// level = null; -// } +// public void setDisabled(Boolean disabled) { +// this.disabled = disabled; +// } // -// if (log4jLevel != null && !event.getLoggingEvent().getLevel().isGreaterOrEqual(log4jLevel)) { -// return; -// } - } - - try { - // admin listeners - Iterator everythingIt = everythingListeners.iterator(); - while (everythingIt.hasNext()) - dispatchEvent(everythingIt.next(), event); - - if (event.getUsername() != null) { - Iterator allUsersIt = allUsersListeners.iterator(); - while (allUsersIt.hasNext()) - dispatchEvent(allUsersIt.next(), event); - - if (userListeners.containsKey(event.getUsername())) { - Iterator userIt = userListeners.get(event.getUsername()).iterator(); - while (userIt.hasNext()) - dispatchEvent(userIt.next(), event); - } - } - } catch (Exception e) { - stdOut("Cannot process logging event"); - e.printStackTrace(); - } - } +// public void setLevel(String level) { +// this.level = level; +// } - protected void dispatchEvent(ArgeoLogListener logListener, LogEvent evt) { -// LoggingEvent event = evt.getLoggingEvent(); -// logListener.appendLog(evt.getUsername(), event.getTimeStamp(), event.getLevel().toString(), -// event.getLoggerName(), event.getThreadName(), event.getMessage(), event.getThrowableStrRep()); - } - - private class AppenderImpl { //extends AppenderSkeleton { - public boolean requiresLayout() { - return false; - } +// public void setConfiguration(Properties configuration) { +// this.configuration = configuration; +// } +// +// public void updateConfiguration(Properties configuration) { +// setConfiguration(configuration); +// reloadConfiguration(); +// } +// +// public Properties getConfiguration() { +// return configuration; +// } +// +// /** +// * Reloads configuration (if the configuration {@link Properties} is set) +// */ +// protected void reloadConfiguration() { +// if (configuration != null) { +//// LogManager.resetConfiguration(); +//// PropertyConfigurator.configure(configuration); +// } +// } - public void close() { - } +// protected synchronized void processLoggingEvent(LogEvent event) { +// if (disabled) +// return; +// +// if (dispatching.get()) +// return; +// +// if (level != null && !level.trim().equals("")) { +//// if (log4jLevel == null || !log4jLevel.toString().equals(level)) +//// try { +//// log4jLevel = Level.toLevel(level); +//// } catch (Exception e) { +//// System.err.println("Log4j level could not be set for level '" + level + "', resetting it to null."); +//// e.printStackTrace(); +//// level = null; +//// } +//// +//// if (log4jLevel != null && !event.getLoggingEvent().getLevel().isGreaterOrEqual(log4jLevel)) { +//// return; +//// } +// } +// +//// try { +//// // admin listeners +//// Iterator everythingIt = everythingListeners.iterator(); +//// while (everythingIt.hasNext()) +//// dispatchEvent(everythingIt.next(), event); +//// +//// if (event.getUsername() != null) { +//// Iterator allUsersIt = allUsersListeners.iterator(); +//// while (allUsersIt.hasNext()) +//// dispatchEvent(allUsersIt.next(), event); +//// +//// if (userListeners.containsKey(event.getUsername())) { +//// Iterator userIt = userListeners.get(event.getUsername()).iterator(); +//// while (userIt.hasNext()) +//// dispatchEvent(userIt.next(), event); +//// } +//// } +//// } catch (Exception e) { +//// stdOut("Cannot process logging event"); +//// e.printStackTrace(); +//// } +// } + +// protected void dispatchEvent(ArgeoLogListener logListener, LogEvent evt) { +//// LoggingEvent event = evt.getLoggingEvent(); +//// logListener.appendLog(evt.getUsername(), event.getTimeStamp(), event.getLevel().toString(), +//// event.getLoggerName(), event.getThreadName(), event.getMessage(), event.getThrowableStrRep()); +// } + +// private class AppenderImpl { // extends AppenderSkeleton { +// public boolean requiresLayout() { +// return false; +// } +// +// public void close() { +// } +// +//// @Override +//// protected void append(LoggingEvent event) { +//// if (events != null) { +//// try { +//// String username = CurrentUser.getUsername(); +//// events.put(new LogEvent(username, event)); +//// } catch (InterruptedException e) { +//// // silent +//// } +//// } +//// } +// +// } -// @Override -// protected void append(LoggingEvent event) { -// if (events != null) { +// private class LogDispatcherThread extends Thread { +// /** encapsulated in order to simplify concurrency management */ +// private LinkedList lastEvents = new LinkedList(); +// +// public LogDispatcherThread() { +// super("Argeo Logging Dispatcher Thread"); +// } +// +// public void run() { +// while (events != null) { // try { -// String username = CurrentUser.getUsername(); -// events.put(new LogEvent(username, event)); +// LogEvent loggingEvent = events.take(); +// processLoggingEvent(loggingEvent); +// addLastEvent(loggingEvent); // } catch (InterruptedException e) { -// // silent +// if (events == null) +// return; // } // } // } +// +// protected synchronized void addLastEvent(LogEvent loggingEvent) { +// if (lastEvents.size() >= maxLastEventsCount) +// lastEvents.poll(); +// lastEvents.add(loggingEvent); +// } +// +// public synchronized List getLastEvents(String username, Integer maxCount) { +// LinkedList evts = new LinkedList(); +// ListIterator it = lastEvents.listIterator(lastEvents.size()); +// int count = 0; +// while (it.hasPrevious() && (count < maxCount)) { +// LogEvent evt = it.previous(); +// if (username == null || username.equals(evt.getUsername())) { +// evts.push(evt); +// count++; +// } +// } +// return evts; +// } +// } - } - - private class LogDispatcherThread extends Thread { - /** encapsulated in order to simplify concurrency management */ - private LinkedList lastEvents = new LinkedList(); - - public LogDispatcherThread() { - super("Argeo Logging Dispatcher Thread"); - } - - public void run() { - while (events != null) { - try { - LogEvent loggingEvent = events.take(); - processLoggingEvent(loggingEvent); - addLastEvent(loggingEvent); - } catch (InterruptedException e) { - if (events == null) - return; - } - } - } - - protected synchronized void addLastEvent(LogEvent loggingEvent) { - if (lastEvents.size() >= maxLastEventsCount) - lastEvents.poll(); - lastEvents.add(loggingEvent); - } - - public synchronized List getLastEvents(String username, Integer maxCount) { - LinkedList evts = new LinkedList(); - ListIterator it = lastEvents.listIterator(lastEvents.size()); - int count = 0; - while (it.hasPrevious() && (count < maxCount)) { - LogEvent evt = it.previous(); - if (username == null || username.equals(evt.getUsername())) { - evts.push(evt); - count++; - } - } - return evts; - } - } - - private class LogEvent { - private final String username; -// private final LoggingEvent loggingEvent; - - public LogEvent(String username) { - super(); - this.username = username; -// this.loggingEvent = loggingEvent; - } - -// @Override -// public int hashCode() { -// return loggingEvent.hashCode(); +// private class LogEvent { +// private final String username; +//// private final LoggingEvent loggingEvent; +// +// public LogEvent(String username) { +// super(); +// this.username = username; +//// this.loggingEvent = loggingEvent; // } // -// @Override -// public boolean equals(Object obj) { -// return loggingEvent.equals(obj); +//// @Override +//// public int hashCode() { +//// return loggingEvent.hashCode(); +//// } +//// +//// @Override +//// public boolean equals(Object obj) { +//// return loggingEvent.equals(obj); +//// } +//// +//// @Override +//// public String toString() { +//// return username + "@ " + loggingEvent.toString(); +//// } +// +// public String getUsername() { +// return username; // } // -// @Override -// public String toString() { -// return username + "@ " + loggingEvent.toString(); +//// public LoggingEvent getLoggingEvent() { +//// return loggingEvent; +//// } +// +// } +// +// private class Log4jConfWatcherThread extends Thread { +// private Path log4jConfigurationPath; +// +// public Log4jConfWatcherThread(Path log4jConfigurationPath) { +// super("Log4j Configuration Watcher"); +// try { +// this.log4jConfigurationPath = log4jConfigurationPath.toRealPath(); +// } catch (IOException e) { +// this.log4jConfigurationPath = log4jConfigurationPath.toAbsolutePath(); +// stdOut("Cannot determine real path for " + log4jConfigurationPath + ": " + e.getMessage()); +// } // } - - public String getUsername() { - return username; - } - -// public LoggingEvent getLoggingEvent() { -// return loggingEvent; +// +// public void run() { +// Path parentDir = log4jConfigurationPath.getParent(); +// try (final WatchService watchService = FileSystems.getDefault().newWatchService()) { +// parentDir.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY); +// WatchKey wk; +// watching: while ((wk = watchService.take()) != null) { +// for (WatchEvent event : wk.pollEvents()) { +// final Path changed = (Path) event.context(); +// if (log4jConfigurationPath.equals(parentDir.resolve(changed))) { +// if (isInternalDebugEnabled()) +// debug(log4jConfigurationPath + " has changed, reloading."); +//// PropertyConfigurator.configure(log4jConfigurationPath.toUri().toURL()); +// } +// } +// // reset the key +// boolean valid = wk.reset(); +// if (!valid) { +// break watching; +// } +// } +// } catch (IOException | InterruptedException e) { +// stdErr("Log4j configuration watcher failed: " + e.getMessage()); +// } // } - - } - - private class Log4jConfWatcherThread extends Thread { - private Path log4jConfigurationPath; - - public Log4jConfWatcherThread(Path log4jConfigurationPath) { - super("Log4j Configuration Watcher"); - try { - this.log4jConfigurationPath = log4jConfigurationPath.toRealPath(); - } catch (IOException e) { - this.log4jConfigurationPath = log4jConfigurationPath.toAbsolutePath(); - stdOut("Cannot determine real path for " + log4jConfigurationPath + ": " + e.getMessage()); - } - } - - public void run() { - Path parentDir = log4jConfigurationPath.getParent(); - try (final WatchService watchService = FileSystems.getDefault().newWatchService()) { - parentDir.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY); - WatchKey wk; - watching: while ((wk = watchService.take()) != null) { - for (WatchEvent event : wk.pollEvents()) { - final Path changed = (Path) event.context(); - if (log4jConfigurationPath.equals(parentDir.resolve(changed))) { - if (isInternalDebugEnabled()) - debug(log4jConfigurationPath + " has changed, reloading."); -// PropertyConfigurator.configure(log4jConfigurationPath.toUri().toURL()); - } - } - // reset the key - boolean valid = wk.reset(); - if (!valid) { - break watching; - } - } - } catch (IOException | InterruptedException e) { - stdErr("Log4j configuration watcher failed: " + e.getMessage()); - } - } - } +// } }