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.AbstractWatcher;
23 import org.apache.logging.log4j.core.util.FileWatcher;
24 import org.apache.logging.log4j.core.util.Source;
25 import org.apache.logging.log4j.core.util.Watcher;
26
27
28
29
30 public class ConfigurationFileWatcher extends AbstractWatcher implements FileWatcher {
31
32 private File file;
33 private long lastModifiedMillis;
34
35 public ConfigurationFileWatcher(final Configuration configuration, final Reconfigurable reconfigurable,
36 final List<ConfigurationListener> configurationListeners, long lastModifiedMillis) {
37 super(configuration, reconfigurable, configurationListeners);
38 this.lastModifiedMillis = lastModifiedMillis;
39 }
40
41 public long getLastModified() {
42 return file != null ? file.lastModified() : 0;
43 }
44
45 @Override
46 public void fileModified(final File file) {
47 lastModifiedMillis = file.lastModified();
48 }
49
50 @Override
51 public void watching(Source source) {
52 file = source.getFile();
53 lastModifiedMillis = file.lastModified();
54 super.watching(source);
55 }
56
57 @Override
58 public boolean isModified() {
59 return lastModifiedMillis != file.lastModified();
60 }
61
62 @Override
63 public Watcher newWatcher(final Reconfigurable reconfigurable, final List<ConfigurationListener> listeners,
64 long lastModifiedMillis) {
65 ConfigurationFileWatcher watcher = new ConfigurationFileWatcher(getConfiguration(), reconfigurable, listeners,
66 lastModifiedMillis);
67 if (getSource() != null) {
68 watcher.watching(getSource());
69 }
70 return watcher;
71 }
72 }