summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java34
-rw-r--r--vespalog/src/main/java/com/yahoo/log/internal/LevelsModSpec.java78
2 files changed, 82 insertions, 30 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
index 6ca4281a243..ba4a915e255 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java
@@ -5,6 +5,7 @@ import com.yahoo.config.model.ConfigModelContext.ApplicationType;
import com.yahoo.config.model.api.ConfigServerSpec;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
+import com.yahoo.log.internal.LevelsModSpec;
import com.yahoo.text.XML;
import com.yahoo.vespa.model.Host;
import com.yahoo.vespa.model.HostResource;
@@ -112,40 +113,13 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu
}
}
- private static Map<String, String> defaultLogLevels() {
- var m = new HashMap<String,String>();
- m.put("all", "off");
- m.put("error", "on");
- m.put("warning", "on");
- m.put("info", "on");
- m.put("config", "on");
- m.put("event", "on");
- m.put("debug", "off");
- m.put("spam", "off");
- return m;
- }
-
private void addLoggingSpec(ModelElement loggingSpec, Admin admin) {
- var currentLevels = defaultLogLevels();
if (loggingSpec == null) return;
String componentSpec = loggingSpec.requiredStringAttribute("name");
String levels = loggingSpec.requiredStringAttribute("levels");
- var levelsModSpec = new StringBuilder();
- levelsModSpec.append("all=off");
- for (String s : levels.split("[ ,]")) {
- if (s.isEmpty()) continue;
- String offOn = "on";
- if (s.startsWith("-")) {
- offOn = "off";
- s = s.substring(1);
- }
- if (currentLevels.containsKey(s)) {
- levelsModSpec.append(",").append(s).append("=").append(offOn);
- } else {
- throw new IllegalArgumentException("invalid level '" + s + "' in logging levels: " + levels);
- }
- }
- admin.addLogctlCommand(componentSpec, levelsModSpec.toString());
+ var levelSpec = new LevelsModSpec();
+ levelSpec.setLevels(levels);
+ admin.addLogctlCommand(componentSpec, levelSpec.toLogctlModSpec());
}
void addLoggingSpecs(ModelElement loggingElement, Admin admin) {
diff --git a/vespalog/src/main/java/com/yahoo/log/internal/LevelsModSpec.java b/vespalog/src/main/java/com/yahoo/log/internal/LevelsModSpec.java
new file mode 100644
index 00000000000..4e45b2a91c5
--- /dev/null
+++ b/vespalog/src/main/java/com/yahoo/log/internal/LevelsModSpec.java
@@ -0,0 +1,78 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.log.internal;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class LevelsModSpec {
+ private static final String ON = "on";
+ private static final String OFF = "off";
+
+ private static Map<String, String> defaultLogLevels() {
+ var m = new LinkedHashMap<String,String>();
+ m.put("fatal", ON);
+ m.put("error", ON);
+ m.put("warning", ON);
+ m.put("info", ON);
+ m.put("event", ON);
+ m.put("config", ON);
+ m.put("debug", OFF);
+ m.put("spam", OFF);
+ return m;
+ }
+ private Map<String, String> levelMods = defaultLogLevels();
+
+ private void setAll(String value) {
+ for (String k : levelMods.keySet()) {
+ levelMods.put(k, value);
+ }
+ }
+ private void setAll() {
+ setAll(ON);
+ }
+ private void clearAll() {
+ setAll(OFF);
+ }
+
+ public LevelsModSpec addModifications(String mods) {
+ for (String s : mods.split("[+ ,]")) {
+ String offOn = ON;
+ if (s.startsWith("-")) {
+ offOn = OFF;
+ s = s.substring(1);
+ }
+ if (s.isEmpty()) continue;
+ if (s.equals("all")) {
+ setAll(offOn);
+ } else if (levelMods.containsKey(s)) {
+ levelMods.put(s, offOn);
+ } else {
+ throw new IllegalArgumentException("Unknown log level: "+s);
+ }
+ }
+ return this;
+ }
+
+ public LevelsModSpec setLevels(String levels) {
+ if (! (levels.startsWith("+") || levels.startsWith("-"))) {
+ clearAll();
+ }
+ return addModifications(levels);
+ }
+
+ public String toLogctlModSpec() {
+ var spec = new StringBuilder();
+ boolean comma = false;
+ for (var entry : levelMods.entrySet()) {
+ if (comma) {
+ spec.append(",");
+ }
+ spec.append(entry.getKey());
+ spec.append("=");
+ spec.append(entry.getValue());
+ comma = true;
+ }
+ return spec.toString();
+ }
+
+}