Skip to content

Commit dfa435a

Browse files
committed
support configure log level by profile; add log level admin to dynamically change log levels
1 parent 87227b6 commit dfa435a

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

src/main/java/act/app/App.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.osgl.cache.CacheServiceProvider;
4747
import org.osgl.http.H;
4848
import org.osgl.http.HttpConfig;
49+
import org.osgl.logging.LogManager;
4950
import org.osgl.logging.Logger;
5051
import org.osgl.mvc.MvcConfig;
5152
import org.osgl.storage.IStorageService;
@@ -730,6 +731,7 @@ private void loadConfig() {
730731
logger.debug("loading app configuration: %s ...", appBase.getAbsolutePath());
731732
config = new AppConfLoader().load(conf);
732733
config.app(this);
734+
configureLoggingLevels();
733735
registerSingleton(AppConfig.class, config);
734736
registerValueObjectCodec();
735737
if (config.i18nEnabled()) {
@@ -1054,6 +1056,33 @@ private void registerBuiltInRythmTransformers() {
10541056
rythmView.registerFormatter(this, new JodaDateTimeFormatter());
10551057
}
10561058

1059+
private void configureLoggingLevels() {
1060+
Map map = config().subSet("log.level");
1061+
map.putAll(config().subSet("act.log.level"));
1062+
for (Object o : map.entrySet()) {
1063+
Map.Entry<String, String> entry = $.cast(o);
1064+
String key = entry.getKey();
1065+
if (key.startsWith("log.level")) {
1066+
key = key.substring("log.level.".length());
1067+
} else {
1068+
key = key.substring("act.log.level.".length());
1069+
}
1070+
Logger.Level level = loggerLevelOf(entry.getValue());
1071+
E.invalidConfigurationIf(null == level, "Unknown log level: %s", entry.getValue());
1072+
Logger logger = LogManager.get(key);
1073+
logger.setLevel(level);
1074+
}
1075+
}
1076+
1077+
private Logger.Level loggerLevelOf(String s) {
1078+
Map<String, Logger.Level> map = new HashMap<>();
1079+
for (Logger.Level level : Logger.Level.values()) {
1080+
map.put(level.name().toUpperCase(), level);
1081+
}
1082+
map.put("WARNING", Logger.Level.WARN);
1083+
return map.get(s.toUpperCase());
1084+
}
1085+
10571086
private void scanAppCodes() {
10581087
classLoader().scan();
10591088
//classLoader().scan();
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package act.util;
2+
3+
import act.cli.Command;
4+
import act.cli.Required;
5+
import org.osgl.logging.LogManager;
6+
import org.osgl.logging.Logger;
7+
import org.osgl.logging.Logger.Level;
8+
import org.osgl.util.S;
9+
10+
public class LogAdmin {
11+
12+
@Command(name = "act.log.level.show", help = "Show log level")
13+
public String showLogLevel(@Required("specify logger name") String name) {
14+
Logger logger = LogManager.get(name);
15+
if (logger.isTraceEnabled()) {
16+
return "trace";
17+
} else if (logger.isDebugEnabled()) {
18+
return "debug";
19+
} else if (logger.isInfoEnabled()) {
20+
return "info";
21+
} else if (logger.isWarnEnabled()) {
22+
return "warn";
23+
} else if (logger.isErrorEnabled()) {
24+
return "error";
25+
}
26+
return "fatal";
27+
}
28+
29+
@Command(
30+
name = "act.log.level.update",
31+
help = "Update logger level. Valid levels are:\n" +
32+
"5 - fatal\n\t" +
33+
"4 - error\n\t" +
34+
"3 - warn\n\t" +
35+
"2 - info\n\t" +
36+
"1 - debug\n\t" +
37+
"0 - trace"
38+
)
39+
public String setLogLevel(
40+
@Required("specify logger name") String name,
41+
@Required("specify log level") int level
42+
) {
43+
Level lvl = convert(level);
44+
Logger logger = LogManager.get(name);
45+
logger.setLevel(lvl);
46+
return S.fmt("logger[%s] level set to %s", name, lvl.toString());
47+
}
48+
49+
private Level convert(int level) {
50+
switch (level) {
51+
case 0:
52+
return Level.TRACE;
53+
case 1:
54+
return Level.DEBUG;
55+
case 2:
56+
return Level.INFO;
57+
case 3:
58+
return Level.WARN;
59+
case 4:
60+
return Level.ERROR;
61+
default:
62+
return Level.FATAL;
63+
}
64+
}
65+
66+
}

0 commit comments

Comments
 (0)