]>
nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/LogConfigurator.java
1 package org
.asamk
.signal
;
5 import ch
.qos
.logback
.classic
.Level
;
6 import ch
.qos
.logback
.classic
.Logger
;
7 import ch
.qos
.logback
.classic
.LoggerContext
;
8 import ch
.qos
.logback
.classic
.PatternLayout
;
9 import ch
.qos
.logback
.classic
.spi
.Configurator
;
10 import ch
.qos
.logback
.classic
.spi
.ILoggingEvent
;
11 import ch
.qos
.logback
.core
.ConsoleAppender
;
12 import ch
.qos
.logback
.core
.FileAppender
;
13 import ch
.qos
.logback
.core
.Layout
;
14 import ch
.qos
.logback
.core
.encoder
.LayoutWrappingEncoder
;
15 import ch
.qos
.logback
.core
.filter
.Filter
;
16 import ch
.qos
.logback
.core
.spi
.ContextAwareBase
;
17 import ch
.qos
.logback
.core
.spi
.FilterReply
;
19 public class LogConfigurator
extends ContextAwareBase
implements Configurator
{
21 private static int verboseLevel
= 0;
22 private static File logFile
= null;
24 public static void setVerboseLevel(int verboseLevel
) {
25 LogConfigurator
.verboseLevel
= verboseLevel
;
28 public static void setLogFile(File logFile
) {
29 LogConfigurator
.logFile
= logFile
;
32 public void configure(LoggerContext lc
) {
33 final var rootLogger
= lc
.getLogger(Logger
.ROOT_LOGGER_NAME
);
35 final var defaultLevel
= verboseLevel
> 1 ? Level
.ALL
: verboseLevel
> 0 ? Level
.DEBUG
: Level
.INFO
;
36 rootLogger
.setLevel(defaultLevel
);
38 final var consoleLayout
= verboseLevel
== 0 || logFile
!= null
39 ?
createSimpleLoggingLayout(lc
)
40 : createDetailedLoggingLayout(lc
);
41 final var consoleAppender
= createLoggingConsoleAppender(lc
, createLayoutWrappingEncoder(consoleLayout
));
42 rootLogger
.addAppender(consoleAppender
);
44 lc
.getLogger("com.zaxxer.hikari")
45 .setLevel(verboseLevel
> 1 ? Level
.ALL
: verboseLevel
> 0 ? Level
.INFO
: Level
.WARN
);
47 if (logFile
!= null) {
48 consoleAppender
.addFilter(new Filter
<>() {
50 public FilterReply
decide(final ILoggingEvent event
) {
51 return event
.getLevel().isGreaterOrEqual(Level
.INFO
)
52 && !"LibSignal".equals(event
.getLoggerName())
54 event
.getLevel().isGreaterOrEqual(Level
.WARN
) || !event
.getLoggerName()
55 .startsWith("com.zaxxer.hikari")
58 ? FilterReply
.NEUTRAL
: FilterReply
.DENY
;
62 final var fileLayout
= createDetailedLoggingLayout(lc
);
63 final var fileAppender
= createLoggingFileAppender(lc
, createLayoutWrappingEncoder(fileLayout
));
64 rootLogger
.addAppender(fileAppender
);
68 private ConsoleAppender
<ILoggingEvent
> createLoggingConsoleAppender(
69 final LoggerContext lc
, final LayoutWrappingEncoder
<ILoggingEvent
> layoutEncoder
71 return new ConsoleAppender
<>() {{
74 setTarget("System.err");
75 setEncoder(layoutEncoder
);
80 private FileAppender
<ILoggingEvent
> createLoggingFileAppender(
81 final LoggerContext lc
, final LayoutWrappingEncoder
<ILoggingEvent
> layoutEncoder
83 return new FileAppender
<>() {{
86 setFile(logFile
.getAbsolutePath());
87 setEncoder(layoutEncoder
);
92 private LayoutWrappingEncoder
<ILoggingEvent
> createLayoutWrappingEncoder(final Layout
<ILoggingEvent
> l
) {
93 return new LayoutWrappingEncoder
<>() {{
94 setContext(l
.getContext());
99 private PatternLayout
createSimpleLoggingLayout(final LoggerContext lc
) {
100 return new PatternLayout() {{
101 setPattern("%-5level %logger{0} - %msg%n");
107 private PatternLayout
createDetailedLoggingLayout(final LoggerContext lc
) {
108 return new PatternLayout() {{
109 setPattern("%d{yyyy-MM-dd'T'HH:mm:ss.SSSXX} [%thread] %-5level %logger{36} - %msg%n");