1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.config;
18
19 import java.io.File;
20 import java.util.List;
21
22 import org.apache.logging.log4j.core.util.FileWatcher;
23 import org.apache.logging.log4j.core.util.Log4jThreadFactory;
24
25
26
27
28 public class ConfiguratonFileWatcher implements FileWatcher {
29
30 private final Reconfigurable reconfigurable;
31 private final List<ConfigurationListener> configurationListeners;
32 private final Log4jThreadFactory threadFactory;
33
34 public ConfiguratonFileWatcher(final Reconfigurable reconfigurable, final List<ConfigurationListener> configurationListeners) {
35 this.reconfigurable = reconfigurable;
36 this.configurationListeners = configurationListeners;
37 this.threadFactory = Log4jThreadFactory.createDaemonThreadFactory("ConfiguratonFileWatcher");
38 }
39
40 public List<ConfigurationListener> getListeners() {
41 return configurationListeners;
42 }
43
44
45 @Override
46 public void fileModified(final File file) {
47 for (final ConfigurationListener configurationListener : configurationListeners) {
48 final Thread thread = threadFactory.newThread(new ReconfigurationRunnable(configurationListener, reconfigurable));
49 thread.start();
50 }
51 }
52
53
54
55
56 private static class ReconfigurationRunnable implements Runnable {
57
58 private final ConfigurationListener configurationListener;
59 private final Reconfigurable reconfigurable;
60
61 public ReconfigurationRunnable(final ConfigurationListener configurationListener, final Reconfigurable reconfigurable) {
62 this.configurationListener = configurationListener;
63 this.reconfigurable = reconfigurable;
64 }
65
66 @Override
67 public void run() {
68 configurationListener.onChange(reconfigurable);
69 }
70 }
71 }