1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.util;
15
16 import ch.qos.logback.core.Context;
17 import ch.qos.logback.core.CoreConstants;
18 import ch.qos.logback.core.spi.ContextAware;
19 import ch.qos.logback.core.spi.LifeCycle;
20 import ch.qos.logback.core.status.OnConsoleStatusListener;
21 import ch.qos.logback.core.status.OnErrorConsoleStatusListener;
22 import ch.qos.logback.core.status.StatusListener;
23
24 import static ch.qos.logback.core.CoreConstants.STDOUT;
25 import static ch.qos.logback.core.CoreConstants.SYSOUT;
26
27 public class StatusListenerConfigHelper {
28
29 public static void installIfAsked(Context context) {
30 String slClass = OptionHelper.getSystemProperty(CoreConstants.STATUS_LISTENER_CLASS_KEY);
31 if (!OptionHelper.isNullOrEmptyOrAllSpaces(slClass)) {
32 addStatusListener(context, slClass);
33 }
34 }
35
36 private static void addStatusListener(Context context, String listenerClassName) {
37 StatusListener listener = null;
38 if (SYSOUT.equalsIgnoreCase(listenerClassName) || STDOUT.equalsIgnoreCase(listenerClassName)) {
39 listener = new OnConsoleStatusListener();
40 } else {
41 listener = createListenerPerClassName(context, listenerClassName);
42 }
43 initAndAddListener(context, listener);
44 }
45
46 private static void initAndAddListener(Context context, StatusListener listener) {
47 if (listener != null) {
48 if (listener instanceof ContextAware)
49 ((ContextAware) listener).setContext(context);
50
51 boolean effectivelyAdded = context.getStatusManager().add(listener);
52 if (effectivelyAdded && (listener instanceof LifeCycle)) {
53 ((LifeCycle) listener).start();
54 }
55 }
56 }
57
58 private static StatusListener createListenerPerClassName(Context context, String listenerClass) {
59 try {
60 return (StatusListener) OptionHelper.instantiateByClassName(listenerClass, StatusListener.class, context);
61 } catch (Exception e) {
62
63 e.printStackTrace();
64 return null;
65 }
66 }
67
68
69
70
71
72
73
74
75 static public void addOnConsoleListenerInstance(Context context, OnConsoleStatusListener onConsoleStatusListener) {
76 onConsoleStatusListener.setContext(context);
77 boolean effectivelyAdded = context.getStatusManager().add(onConsoleStatusListener);
78 if (effectivelyAdded) {
79 onConsoleStatusListener.start();
80 }
81 }
82 }