24
24
import ch .qos .logback .core .status .OnConsoleStatusListener ;
25
25
import ch .qos .logback .core .status .Status ;
26
26
import ch .qos .logback .core .status .StatusListener ;
27
- import ch .qos .logback .core .status .StatusManager ;
28
- import ch .qos .logback .core .util .StatusPrinter2 ;
27
+ import ch .qos .logback .core .util .StatusListenerConfigHelper ;
29
28
30
29
/**
31
30
* {@link StatusListener} used to print appropriate status messages to {@link System#out}
32
31
* or {@link System#err}. Note that this class extends {@link OnConsoleStatusListener} so
33
32
* that {@link BasicStatusManager#add(StatusListener)} does not add the same listener
34
- * twice. It also implement a version of retrospectivePrint that can filter status
33
+ * twice. It also implements a version of retrospectivePrint that can filter status
35
34
* messages by level.
36
35
*
37
36
* @author Dmytro Nosan
@@ -41,8 +40,6 @@ final class SystemStatusListener extends OnConsoleStatusListener {
41
40
42
41
static final long RETROSPECTIVE_THRESHOLD = 300 ;
43
42
44
- private static final StatusPrinter2 PRINTER = new StatusPrinter2 ();
45
-
46
43
private final boolean debug ;
47
44
48
45
private SystemStatusListener (boolean debug ) {
@@ -63,53 +60,33 @@ private void retrospectivePrint() {
63
60
}
64
61
long now = System .currentTimeMillis ();
65
62
List <Status > statusList = this .context .getStatusManager ().getCopyOfStatusList ();
66
- statusList .stream ().filter ((status ) -> isPrintable (status , now )).forEach (this ::print );
67
- }
68
-
69
- private void print (Status status ) {
70
- StringBuilder sb = new StringBuilder ();
71
- PRINTER .buildStr (sb , "" , status );
72
- getPrintStream ().print (sb );
63
+ statusList .stream ()
64
+ .filter ((status ) -> getElapsedTime (status , now ) < RETROSPECTIVE_THRESHOLD )
65
+ .forEach (this ::addStatusEvent );
73
66
}
74
67
75
68
@ Override
76
69
public void addStatusEvent (Status status ) {
77
- if (isPrintable ( status , 0 ) ) {
70
+ if (this . debug || status . getLevel () >= Status . WARN ) {
78
71
super .addStatusEvent (status );
79
72
}
80
73
}
81
74
82
- private boolean isPrintable (Status status , long now ) {
83
- boolean timstampInRange = (now == 0 || (now - status .getTimestamp ()) < RETROSPECTIVE_THRESHOLD );
84
- return timstampInRange && (this .debug || status .getLevel () >= Status .WARN );
85
- }
86
-
87
75
@ Override
88
76
protected PrintStream getPrintStream () {
89
77
return (!this .debug ) ? System .err : System .out ;
90
78
}
91
79
80
+ private static long getElapsedTime (Status status , long now ) {
81
+ return now - status .getTimestamp ();
82
+ }
83
+
92
84
static void addTo (LoggerContext loggerContext ) {
93
85
addTo (loggerContext , false );
94
86
}
95
87
96
88
static void addTo (LoggerContext loggerContext , boolean debug ) {
97
- SystemStatusListener listener = new SystemStatusListener (debug );
98
- listener .setContext (loggerContext );
99
- StatusManager statusManager = loggerContext .getStatusManager ();
100
- if (statusManager .add (listener )) {
101
- listener .start ();
102
- }
103
- }
104
-
105
- @ Override
106
- public boolean equals (Object obj ) {
107
- return (obj != null ) && (obj .getClass () == getClass ());
108
- }
109
-
110
- @ Override
111
- public int hashCode () {
112
- return getClass ().hashCode ();
89
+ StatusListenerConfigHelper .addOnConsoleListenerInstance (loggerContext , new SystemStatusListener (debug ));
113
90
}
114
91
115
92
}
0 commit comments