1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.util;
15
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Map.Entry;
19 import java.util.Properties;
20
21 import ch.qos.logback.core.Context;
22 import ch.qos.logback.core.CoreConstants;
23 import ch.qos.logback.core.hook.ShutdownHook;
24 import ch.qos.logback.core.rolling.helper.FileNamePattern;
25 import ch.qos.logback.core.spi.ContextAwareBase;
26
27 public class ContextUtil extends ContextAwareBase {
28
29 static final String GROOVY_RUNTIME_PACKAGE = "org.codehaus.groovy.runtime";
30
31
32 public ContextUtil(Context context) {
33 setContext(context);
34 }
35
36 public void addProperties(Properties props) {
37 if (props == null) {
38 return;
39 }
40
41 for (Entry<Object, Object> e : props.entrySet()) {
42 String key = (String) e.getKey();
43 context.putProperty(key, (String) e.getValue());
44 }
45
46 }
47
48 public void addGroovyPackages(List<String> frameworkPackages) {
49 addFrameworkPackage(frameworkPackages, GROOVY_RUNTIME_PACKAGE);
50 }
51
52 public void addFrameworkPackage(List<String> frameworkPackages, String packageName) {
53 if (!frameworkPackages.contains(packageName)) {
54 frameworkPackages.add(packageName);
55 }
56 }
57
58
59
60
61
62
63
64
65 public void addOrReplaceShutdownHook(ShutdownHook hook) {
66 Runtime runtime = Runtime.getRuntime();
67
68 Thread oldShutdownHookThread = (Thread) context.getObject(CoreConstants.SHUTDOWN_HOOK_THREAD);
69 if(oldShutdownHookThread != null) {
70 addInfo("Removing old shutdown hook from JVM runtime");
71 runtime.removeShutdownHook(oldShutdownHookThread);
72 }
73
74 Thread hookThread = new Thread(hook, "Logback shutdown hook [" + context.getName() + "]");
75 addInfo("Registering shutdown hook with JVM runtime.");
76 context.putObject(CoreConstants.SHUTDOWN_HOOK_THREAD, hookThread);
77 runtime.addShutdownHook(hookThread);
78
79 }
80
81 }