001/*
002 * PermissionsEx
003 * Copyright (C) zml and PermissionsEx contributors
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *    http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package ca.stellardrift.permissionsex.impl.logging;
018
019import ca.stellardrift.permissionsex.logging.FormattedLogger;
020import net.kyori.adventure.text.Component;
021import net.kyori.adventure.text.serializer.ComponentSerializer;
022import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
023import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
024import net.kyori.adventure.translation.GlobalTranslator;
025import org.checkerframework.checker.nullness.qual.Nullable;
026import org.slf4j.Logger;
027import org.slf4j.Marker;
028
029import java.util.Locale;
030
031/**
032 * An implementation of {@link FormattedLogger} that delegates to an existing logger
033 */
034public class WrappingFormattedLogger implements FormattedLogger {
035
036    public static FormattedLogger of(Logger logger, boolean supportsFormatting) {
037        return logger instanceof FormattedLogger ? ((FormattedLogger) logger) : new WrappingFormattedLogger(logger, supportsFormatting);
038    }
039    private final Logger wrapping;
040    private @Nullable String prefix;
041    private final boolean supportsFormatting;
042
043    public WrappingFormattedLogger(Logger wrapping, boolean supportsFormatting) {
044        this.wrapping = wrapping;
045        this.supportsFormatting = supportsFormatting;
046    }
047
048    @Override
049    public Locale logLocale() {
050        return Locale.getDefault();
051    }
052
053    @Override
054    public Locale logLocale(final @Nullable Marker marker) {
055        return logLocale();
056    }
057
058    @Override
059    public @Nullable String prefix() {
060        return this.prefix;
061    }
062
063    @Override
064    public void prefix(final @Nullable String prefix) {
065        this.prefix = prefix;
066    }
067
068    @Override
069    public ComponentSerializer<Component, ?, String> serializer() {
070        if (supportsFormatting) {
071            return LegacyComponentSerializer.legacySection();
072        } else {
073            return PlainComponentSerializer.plain();
074        }
075    }
076
077    @Override
078    public String formatText(Component component, @org.checkerframework.checker.nullness.qual.Nullable Marker marker) {
079        return serializer().serialize(GlobalTranslator.render(component, logLocale(marker)));
080    }
081
082    private String applyPrefix(String input) {
083        final @Nullable String prefix = this.prefix;
084        return prefix == null ? input : (prefix + input);
085    }
086
087    /**
088     * {@inheritDoc}
089     */
090    @Override
091    public String getName() {
092        return wrapping.getName();
093    }
094
095    /**
096     * {@inheritDoc}
097     */
098    @Override
099    public boolean isTraceEnabled() {
100        return wrapping.isTraceEnabled();
101    }
102
103    /**
104     * {@inheritDoc}
105     */
106    @Override
107    public void trace(String msg) {
108        wrapping.trace(applyPrefix(msg));
109    }
110
111    /**
112     * {@inheritDoc}
113     */
114    @Override
115    public void trace(String format, Object arg) {
116        wrapping.trace(applyPrefix(format), arg);
117    }
118
119    /**
120     * {@inheritDoc}
121     */
122    @Override
123    public void trace(String format, Object arg1, Object arg2) {
124        wrapping.trace(applyPrefix(format), arg1, arg2);
125    }
126
127    /**
128     * {@inheritDoc}
129     */
130    @Override
131    public void trace(String format, Object... arguments) {
132        wrapping.trace(applyPrefix(format), arguments);
133    }
134
135    /**
136     * {@inheritDoc}
137     */
138    @Override
139    public void trace(String msg, Throwable t) {
140        wrapping.trace(applyPrefix(msg), t);
141    }
142
143    /**
144     * {@inheritDoc}
145     */
146    @Override
147    public boolean isTraceEnabled(Marker marker) {
148        return wrapping.isTraceEnabled(marker);
149    }
150
151    /**
152     * {@inheritDoc}
153     */
154    @Override
155    public void trace(Marker marker, String msg) {
156        wrapping.trace(marker, applyPrefix(msg));
157    }
158
159    /**
160     * {@inheritDoc}
161     */
162    @Override
163    public void trace(Marker marker, String format, Object arg) {
164        wrapping.trace(marker, applyPrefix(format), arg);
165    }
166
167    /**
168     * {@inheritDoc}
169     */
170    @Override
171    public void trace(Marker marker, String format, Object arg1, Object arg2) {
172        wrapping.trace(marker, applyPrefix(format), arg1, arg2);
173    }
174
175    /**
176     * {@inheritDoc}
177     */
178    @Override
179    public void trace(Marker marker, String format, Object... argArray) {
180        wrapping.trace(marker, applyPrefix(format), argArray);
181    }
182
183    /**
184     * {@inheritDoc}
185     */
186    @Override
187    public void trace(Marker marker, String msg, Throwable t) {
188        wrapping.trace(marker, applyPrefix(msg), t);
189    }
190
191    /**
192     * {@inheritDoc}
193     */
194    @Override
195    public boolean isDebugEnabled() {
196        return wrapping.isDebugEnabled();
197    }
198
199    /**
200     * {@inheritDoc}
201     */
202    @Override
203    public void debug(String msg) {
204        wrapping.debug(applyPrefix(msg));
205    }
206
207    /**
208     * {@inheritDoc}
209     */
210    @Override
211    public void debug(String format, Object arg) {
212        wrapping.debug(applyPrefix(format), arg);
213    }
214
215    /**
216     * {@inheritDoc}
217     */
218    @Override
219    public void debug(String format, Object arg1, Object arg2) {
220        wrapping.debug(applyPrefix(format), arg1, arg2);
221    }
222
223    /**
224     * {@inheritDoc}
225     */
226    @Override
227    public void debug(String format, Object... arguments) {
228        wrapping.debug(applyPrefix(format), arguments);
229    }
230
231    /**
232     * {@inheritDoc}
233     */
234    @Override
235    public void debug(String msg, Throwable t) {
236        wrapping.debug(applyPrefix(msg), t);
237    }
238
239    /**
240     * {@inheritDoc}
241     */
242    @Override
243    public boolean isDebugEnabled(Marker marker) {
244        return wrapping.isDebugEnabled(marker);
245    }
246
247    /**
248     * {@inheritDoc}
249     */
250    @Override
251    public void debug(Marker marker, String msg) {
252        wrapping.debug(marker, applyPrefix(msg));
253    }
254
255    /**
256     * {@inheritDoc}
257     */
258    @Override
259    public void debug(Marker marker, String format, Object arg) {
260        wrapping.debug(marker, applyPrefix(format), arg);
261    }
262
263    /**
264     * {@inheritDoc}
265     */
266    @Override
267    public void debug(Marker marker, String format, Object arg1, Object arg2) {
268        wrapping.debug(marker, applyPrefix(format), arg1, arg2);
269    }
270
271    @Override
272    public void debug(Marker marker, String format, Object... arguments) {
273        wrapping.debug(marker, applyPrefix(format), arguments);
274    }
275
276    @Override
277    public void debug(Marker marker, String msg, Throwable t) {
278        wrapping.debug(marker, applyPrefix(msg), t);
279    }
280
281    @Override
282    public boolean isInfoEnabled() {
283        return wrapping.isInfoEnabled();
284    }
285
286    @Override
287    public void info(String msg) {
288        wrapping.info(applyPrefix(msg));
289    }
290
291    @Override
292    public void info(String format, Object arg) {
293        wrapping.info(applyPrefix(format), arg);
294    }
295
296    @Override
297    public void info(String format, Object arg1, Object arg2) {
298        wrapping.info(applyPrefix(format), arg1, arg2);
299    }
300
301    @Override
302    public void info(String format, Object... arguments) {
303        wrapping.info(applyPrefix(format), arguments);
304    }
305
306    @Override
307    public void info(String msg, Throwable t) {
308        wrapping.info(applyPrefix(msg), t);
309    }
310
311    @Override
312    public boolean isInfoEnabled(Marker marker) {
313        return wrapping.isInfoEnabled(marker);
314    }
315
316    @Override
317    public void info(Marker marker, String msg) {
318        wrapping.info(marker, applyPrefix(msg));
319    }
320
321    @Override
322    public void info(Marker marker, String format, Object arg) {
323        wrapping.info(marker, applyPrefix(format), arg);
324    }
325
326    @Override
327    public void info(Marker marker, String format, Object arg1, Object arg2) {
328        wrapping.info(marker, applyPrefix(format), arg1, arg2);
329    }
330
331    @Override
332    public void info(Marker marker, String format, Object... arguments) {
333        wrapping.info(marker, applyPrefix(format), arguments);
334    }
335
336    @Override
337    public void info(Marker marker, String msg, Throwable t) {
338        wrapping.info(marker, applyPrefix(msg), t);
339    }
340
341    @Override
342    public boolean isWarnEnabled() {
343        return wrapping.isWarnEnabled();
344    }
345
346
347    @Override
348    public void warn(String msg) {
349        wrapping.warn(applyPrefix(msg));
350    }
351
352    @Override
353    public void warn(String format, Object arg) {
354        wrapping.warn(applyPrefix(format), arg);
355    }
356
357    @Override
358    public void warn(String format, Object... arguments) {
359        wrapping.warn(applyPrefix(format), arguments);
360    }
361
362    @Override
363    public void warn(String format, Object arg1, Object arg2) {
364        wrapping.warn(applyPrefix(format), arg1, arg2);
365    }
366
367    @Override
368    public void warn(String msg, Throwable t) {
369        wrapping.warn(applyPrefix(msg), t);
370    }
371
372    @Override
373    public boolean isWarnEnabled(Marker marker) {
374        return wrapping.isWarnEnabled(marker);
375    }
376
377    @Override
378    public void warn(Marker marker, String msg) {
379        wrapping.warn(marker, applyPrefix(msg));
380    }
381
382    @Override
383    public void warn(Marker marker, String format, Object arg) {
384        wrapping.warn(marker, applyPrefix(format), arg);
385    }
386
387    @Override
388    public void warn(Marker marker, String format, Object arg1, Object arg2) {
389        wrapping.warn(marker, applyPrefix(format), arg1, arg2);
390    }
391
392    @Override
393    public void warn(Marker marker, String format, Object... arguments) {
394        wrapping.warn(marker, applyPrefix(format), arguments);
395    }
396
397    @Override
398    public void warn(Marker marker, String msg, Throwable t) {
399        wrapping.warn(marker, applyPrefix(msg), t);
400    }
401
402    @Override
403    public boolean isErrorEnabled() {
404        return wrapping.isErrorEnabled();
405    }
406
407    @Override
408    public void error(String msg) {
409        wrapping.error(applyPrefix(msg));
410    }
411
412    @Override
413    public void error(String format, Object arg) {
414        wrapping.error(applyPrefix(format), arg);
415    }
416
417    @Override
418    public void error(String format, Object arg1, Object arg2) {
419        wrapping.error(applyPrefix(format), arg1, arg2);
420    }
421
422    @Override
423    public void error(String format, Object... arguments) {
424        wrapping.error(applyPrefix(format), arguments);
425    }
426
427    @Override
428    public void error(String msg, Throwable t) {
429        wrapping.error(applyPrefix(msg), t);
430    }
431
432    @Override
433    public boolean isErrorEnabled(Marker marker) {
434        return wrapping.isErrorEnabled(marker);
435    }
436
437    @Override
438    public void error(Marker marker, String msg) {
439        wrapping.error(marker, applyPrefix(msg));
440    }
441
442    @Override
443    public void error(Marker marker, String format, Object arg) {
444        wrapping.error(marker, applyPrefix(format), arg);
445    }
446
447    @Override
448    public void error(Marker marker, String format, Object arg1, Object arg2) {
449        wrapping.error(marker, applyPrefix(format), arg1, arg2);
450    }
451
452    @Override
453    public void error(Marker marker, String format, Object... arguments) {
454        wrapping.error(marker, applyPrefix(format), arguments);
455    }
456
457    @Override
458    public void error(Marker marker, String msg, Throwable t) {
459        wrapping.error(marker, applyPrefix(msg), t);
460    }
461}