-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathLog.java
More file actions
71 lines (63 loc) · 2.34 KB
/
Log.java
File metadata and controls
71 lines (63 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package io.github.humbleui.jwm;
import java.io.*;
import java.util.function.*;
import org.jetbrains.annotations.*;
public class Log {
@ApiStatus.Internal public static boolean _verbose = false;
@ApiStatus.Internal public static Consumer<Object> _listener;
/**
* <p>Log (default) message to JWM logger.</p>
* <p>Has no effect if message consumer is not set.</p>
*
* @param message message to log
*/
public static void log(Object message) {
assert _onUIThread() : "Should be run on UI thread";
if (_listener != null) {
if (message instanceof Throwable) {
StringWriter sw = new StringWriter();
try (PrintWriter pw = new PrintWriter(sw);) {
((Throwable) message).printStackTrace(pw);
}
message = sw.toString();
}
_listener.accept(message);
}
}
/**
* <p>Log verbose message to JWM logger.</p>
* <p>Has no effect if message consumer is not set or verbose level is not enabled.</p>
*
* @param message message to log
*/
public static void verbose(Object message) {
assert _onUIThread() : "Should be run on UI thread";
if (_listener != null && _verbose)
_listener.accept(message);
}
/**
* <p>Set JWM application log messages consumer.</p>
* <p>Accepts default and verbose log messages.</p>
*/
public static void setLogger(@Nullable Consumer<Object> listener) {
assert _onUIThread() : "Should be run on UI thread";
_listener = listener;
_nSetListener(listener);
}
/**
* <p>Enable verbose log messages.</p>
* <p>By default, verbose messages are enabled on application init if environ variable JWM_VERBOSE=true is set.</p>
*
* @param enabled flag to enable or disable verbose messages
*/
public static void setVerbose(boolean enabled) {
assert _onUIThread() : "Should be run on UI thread";
_verbose = enabled;
_nSetVerbose(enabled);
}
@ApiStatus.Internal public static boolean _onUIThread() {
return App._onUIThread();
}
@ApiStatus.Internal public static native void _nSetVerbose(boolean enabled);
@ApiStatus.Internal public static native void _nSetListener(Consumer<Object> listener);
}