|
25 | 25 |
|
26 | 26 | import org.opengrok.indexer.configuration.RuntimeEnvironment;
|
27 | 27 |
|
| 28 | +import java.util.HashMap; |
| 29 | +import java.util.Map; |
28 | 30 | import java.util.concurrent.atomic.AtomicLong;
|
29 | 31 | import java.util.logging.Level;
|
30 | 32 | import java.util.logging.Logger;
|
@@ -81,27 +83,37 @@ public void increment() {
|
81 | 83 |
|
82 | 84 | private void logLoop() {
|
83 | 85 | long cachedCount = 0;
|
| 86 | + Map<Level, Long> lastLoggedChunk = new HashMap<>(); |
| 87 | + Map<Level, Integer> levelCount = Map.of(Level.INFO, 100, |
| 88 | + Level.FINE, 50, |
| 89 | + Level.FINER, 10, |
| 90 | + Level.FINEST, 1); |
84 | 91 |
|
85 | 92 | while (true) {
|
86 | 93 | long currentCount = this.currentCount.get();
|
87 |
| - Level currentLevel; |
| 94 | + Level currentLevel = Level.FINEST; |
88 | 95 |
|
| 96 | + // Do not log if there was no progress. |
89 | 97 | if (cachedCount < currentCount) {
|
90 |
| - if (currentCount <= 1 || currentCount % 100 == 0) { |
| 98 | + if (currentCount <= 1 || currentCount == totalCount) { |
91 | 99 | currentLevel = Level.INFO;
|
92 |
| - } else if (currentCount % 50 == 0) { |
93 |
| - currentLevel = Level.FINE; |
94 |
| - } else if (currentCount % 10 == 0) { |
95 |
| - currentLevel = Level.FINER; |
96 | 100 | } else {
|
97 |
| - currentLevel = Level.FINEST; |
| 101 | + if (lastLoggedChunk.getOrDefault(Level.INFO, -1L) < |
| 102 | + currentCount / levelCount.get(Level.INFO)) { |
| 103 | + currentLevel = Level.INFO; |
| 104 | + } else if (lastLoggedChunk.getOrDefault(Level.FINE, -1L) < |
| 105 | + currentCount / levelCount.get(Level.FINE)) { |
| 106 | + currentLevel = Level.FINE; |
| 107 | + } else if (lastLoggedChunk.getOrDefault(Level.FINER, -1L) < |
| 108 | + currentCount / levelCount.get(Level.FINER)) { |
| 109 | + currentLevel = Level.FINER; |
| 110 | + } |
98 | 111 | }
|
99 | 112 |
|
100 |
| - // Do not log if there was no progress. |
101 | 113 | if (logger.isLoggable(currentLevel)) {
|
| 114 | + lastLoggedChunk.put(currentLevel, currentCount / levelCount.get(currentLevel)); |
102 | 115 | logger.log(currentLevel, "Progress: {0} ({1}%) for {2}",
|
103 |
| - new Object[]{currentCount, currentCount * 100.0f / |
104 |
| - totalCount, suffix}); |
| 116 | + new Object[]{currentCount, currentCount * 100.0f / totalCount, suffix}); |
105 | 117 | }
|
106 | 118 | }
|
107 | 119 |
|
|
0 commit comments