001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. 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 org.apache.logging.log4j;
018
019import org.apache.logging.log4j.message.EntryMessage;
020import org.apache.logging.log4j.message.Message;
021import org.apache.logging.log4j.message.MessageFactory;
022import org.apache.logging.log4j.message.MessageFactory2;
023import org.apache.logging.log4j.util.MessageSupplier;
024import org.apache.logging.log4j.util.Supplier;
025
026/**
027 * This is the central interface in the log4j package. Most logging operations, except configuration, are done through
028 * this interface.
029 *
030 * <p>
031 * The canonical way to obtain a Logger for a class is through {@link LogManager#getLogger()}. Typically, each class
032 * gets its own Logger named after its fully qualified class name (the default Logger name when obtained through the
033 * {@link LogManager#getLogger()} method). Thus, the simplest way to use this would be like so:
034 * </p>
035 *
036 * <pre>
037 * public class MyClass {
038 *     private static final Logger LOGGER = LogManager.getLogger();
039 *     // ...
040 * }
041 * </pre>
042 * <p>
043 * For ease of filtering, searching, sorting, etc., it is generally a good idea to create Loggers for each class rather
044 * than sharing Loggers. Instead, {@link Marker Markers} should be used for shared, filterable identification.
045 * </p>
046 * <p>
047 * For service provider implementations, it is recommended to extend the
048 * {@link org.apache.logging.log4j.spi.AbstractLogger} class rather than implementing this interface directly.
049 * </p>
050 *
051 * Since 2.4, methods have been added to the {@code Logger} interface to support lambda expressions. The new methods
052 * allow client code to lazily log messages without explicitly checking if the requested log level is enabled. For
053 * example, previously one would write:
054 *
055 * <pre>
056 * // pre-Java 8 style optimization: explicitly check the log level
057 * // to make sure the expensiveOperation() method is only called if necessary
058 * if (logger.isTraceEnabled()) {
059 *     logger.trace(&quot;Some long-running operation returned {}&quot;, expensiveOperation());
060 * }
061 * </pre>
062 * <p>
063 * With Java 8, the same effect can be achieved with a lambda expression:
064 *
065 * <pre>
066 * // Java-8 style optimization: no need to explicitly check the log level:
067 * // the lambda expression is not evaluated if the TRACE level is not enabled
068 * logger.trace(&quot;Some long-running operation returned {}&quot;, () -&gt; expensiveOperation());
069 * </pre>
070 *
071 * <p>
072 * Note that although {@link MessageSupplier} is provided, using {@link Supplier {@code Supplier<Message>}} works just the
073 * same. MessageSupplier was deprecated in 2.6 and un-deprecated in 2.8.1. Anonymous class usage of these APIs
074 * should prefer using Supplier instead.
075 * </p>
076 */
077public interface Logger {
078
079    /**
080     * Logs a {@link Throwable} that has been caught to a specific logging level.
081     *
082     * @param level The logging Level.
083     * @param throwable the Throwable.
084     */
085    void catching(Level level, Throwable throwable);
086
087    /**
088     * Logs a {@link Throwable} that has been caught at the {@link Level#ERROR ERROR} level.
089     * Normally, one may wish to provide additional information with an exception while logging it;
090     * in these cases, one would not use this method.
091     * In other cases where simply logging the fact that an exception was swallowed somewhere
092     * (e.g., at the top of the stack trace in a {@code main()} method),
093     * this method is ideal for it.
094     *
095     * @param throwable the Throwable.
096     */
097    void catching(Throwable throwable);
098
099    /**
100     * Logs a message with the specific Marker at the {@link Level#DEBUG DEBUG} level.
101     *
102     * @param marker the marker data specific to this log statement
103     * @param message the message string to be logged
104     */
105    void debug(Marker marker, Message message);
106
107    /**
108     * Logs a message with the specific Marker at the {@link Level#DEBUG DEBUG} level.
109     *
110     * @param marker the marker data specific to this log statement
111     * @param message the message string to be logged
112     * @param throwable A Throwable or null.
113     */
114    void debug(Marker marker, Message message, Throwable throwable);
115
116    /**
117     * Logs a message which is only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level with
118     * the specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
119     * {@code Message}.
120     *
121     * @param marker the marker data specific to this log statement
122     * @param messageSupplier A function, which when called, produces the desired log message.
123     * @since 2.4
124     */
125    void debug(Marker marker, MessageSupplier messageSupplier);
126
127    /**
128     * Logs a message (only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level) with the
129     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The
130     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
131     *
132     * @param marker the marker data specific to this log statement
133     * @param messageSupplier A function, which when called, produces the desired log message.
134     * @param throwable A Throwable or null.
135     * @since 2.4
136     */
137    void debug(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
138
139    /**
140     * Logs a message CharSequence with the {@link Level#DEBUG DEBUG} level.
141     *
142     * @param marker the marker data specific to this log statement
143     * @param message the message CharSequence to log.
144     */
145    void debug(Marker marker, CharSequence message);
146
147    /**
148     * Logs a message CharSequence at the {@link Level#DEBUG DEBUG} level including the stack trace of the
149     * {@link Throwable} <code>throwable</code> passed as parameter.
150     *
151     * @param marker the marker data specific to this log statement
152     * @param message the message CharSequence to log.
153     * @param throwable the {@code Throwable} to log, including its stack trace.
154     */
155    void debug(Marker marker, CharSequence message, Throwable throwable);
156
157    /**
158     * Logs a message object with the {@link Level#DEBUG DEBUG} level.
159     *
160     * @param marker the marker data specific to this log statement
161     * @param message the message object to log.
162     */
163    void debug(Marker marker, Object message);
164
165    /**
166     * Logs a message at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
167     * <code>throwable</code> passed as parameter.
168     *
169     * @param marker the marker data specific to this log statement
170     * @param message the message to log.
171     * @param throwable the {@code Throwable} to log, including its stack trace.
172     */
173    void debug(Marker marker, Object message, Throwable throwable);
174
175    /**
176     * Logs a message object with the {@link Level#DEBUG DEBUG} level.
177     *
178     * @param marker the marker data specific to this log statement
179     * @param message the message object to log.
180     */
181    void debug(Marker marker, String message);
182
183    /**
184     * Logs a message with parameters at the {@link Level#DEBUG DEBUG} level.
185     *
186     * @param marker the marker data specific to this log statement
187     * @param message the message to log; the format depends on the message factory.
188     * @param params parameters to the message.
189     * @see #getMessageFactory()
190     */
191    void debug(Marker marker, String message, Object... params);
192
193    /**
194     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#DEBUG
195     * DEBUG} level.
196     *
197     * @param marker the marker data specific to this log statement
198     * @param message the message to log; the format depends on the message factory.
199     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
200     * @since 2.4
201     */
202    void debug(Marker marker, String message, Supplier<?>... paramSuppliers);
203
204    /**
205     * Logs a message at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
206     * <code>throwable</code> passed as parameter.
207     *
208     * @param marker the marker data specific to this log statement
209     * @param message the message to log.
210     * @param throwable the {@code Throwable} to log, including its stack trace.
211     */
212    void debug(Marker marker, String message, Throwable throwable);
213
214    /**
215     * Logs a message which is only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level with
216     * the specified Marker.
217     *
218     * @param marker the marker data specific to this log statement
219     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
220     *            message factory.
221     * @since 2.4
222     */
223    void debug(Marker marker, Supplier<?> messageSupplier);
224
225    /**
226     * Logs a message (only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level) with the
227     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
228     *
229     * @param marker the marker data specific to this log statement
230     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
231     *            message factory.
232     * @param throwable A Throwable or null.
233     * @since 2.4
234     */
235    void debug(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
236
237    /**
238     * Logs a message with the specific Marker at the {@link Level#DEBUG DEBUG} level.
239     *
240     * @param message the message string to be logged
241     */
242    void debug(Message message);
243
244    /**
245     * Logs a message with the specific Marker at the {@link Level#DEBUG DEBUG} level.
246     *
247     * @param message the message string to be logged
248     * @param throwable A Throwable or null.
249     */
250    void debug(Message message, Throwable throwable);
251
252    /**
253     * Logs a message which is only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level. The
254     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
255     *
256     * @param messageSupplier A function, which when called, produces the desired log message.
257     * @since 2.4
258     */
259    void debug(MessageSupplier messageSupplier);
260
261    /**
262     * Logs a message (only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level) including the
263     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
264     * not use the {@link MessageFactory} to construct the {@code Message}.
265     *
266     * @param messageSupplier A function, which when called, produces the desired log message.
267     * @param throwable the {@code Throwable} to log, including its stack trace.
268     * @since 2.4
269     */
270    void debug(MessageSupplier messageSupplier, Throwable throwable);
271
272    /**
273     * Logs a message CharSequence with the {@link Level#DEBUG DEBUG} level.
274     *
275     * @param message the message object to log.
276     */
277    void debug(CharSequence message);
278
279    /**
280     * Logs a CharSequence at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
281     * <code>throwable</code> passed as parameter.
282     *
283     * @param message the message CharSequence to log.
284     * @param throwable the {@code Throwable} to log, including its stack trace.
285     */
286    void debug(CharSequence message, Throwable throwable);
287
288    /**
289     * Logs a message object with the {@link Level#DEBUG DEBUG} level.
290     *
291     * @param message the message object to log.
292     */
293    void debug(Object message);
294
295    /**
296     * Logs a message at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
297     * <code>throwable</code> passed as parameter.
298     *
299     * @param message the message to log.
300     * @param throwable the {@code Throwable} to log, including its stack trace.
301     */
302    void debug(Object message, Throwable throwable);
303
304    /**
305     * Logs a message object with the {@link Level#DEBUG DEBUG} level.
306     *
307     * @param message the message string to log.
308     */
309    void debug(String message);
310
311    /**
312     * Logs a message with parameters at the {@link Level#DEBUG DEBUG} level.
313     *
314     * @param message the message to log; the format depends on the message factory.
315     * @param params parameters to the message.
316     * @see #getMessageFactory()
317     */
318    void debug(String message, Object... params);
319
320    /**
321     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#DEBUG
322     * DEBUG} level.
323     *
324     * @param message the message to log; the format depends on the message factory.
325     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
326     * @since 2.4
327     */
328    void debug(String message, Supplier<?>... paramSuppliers);
329
330    /**
331     * Logs a message at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
332     * <code>throwable</code> passed as parameter.
333     *
334     * @param message the message to log.
335     * @param throwable the {@code Throwable} to log, including its stack trace.
336     */
337    void debug(String message, Throwable throwable);
338
339    /**
340     * Logs a message which is only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level.
341     *
342     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
343     *            message factory.
344     * @since 2.4
345     */
346    void debug(Supplier<?> messageSupplier);
347
348    /**
349     * Logs a message (only to be constructed if the logging level is the {@link Level#DEBUG DEBUG} level) including the
350     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
351     *
352     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
353     *            message factory.
354     * @param throwable the {@code Throwable} to log, including its stack trace.
355     * @since 2.4
356     */
357    void debug(Supplier<?> messageSupplier, Throwable throwable);
358
359    /**
360     * Logs a message with parameters at debug level.
361     *
362     * @param marker the marker data specific to this log statement
363     * @param message the message to log; the format depends on the message factory.
364     * @param p0 parameter to the message.
365     */
366    void debug(Marker marker, String message, Object p0);
367
368    /**
369     * Logs a message with parameters at debug level.
370     *
371     * @param marker the marker data specific to this log statement
372     * @param message the message to log; the format depends on the message factory.
373     * @param p0 parameter to the message.
374     * @param p1 parameter to the message.
375     */
376    void debug(Marker marker, String message, Object p0, Object p1);
377
378    /**
379     * Logs a message with parameters at debug level.
380     *
381     * @param marker the marker data specific to this log statement
382     * @param message the message to log; the format depends on the message factory.
383     * @param p0 parameter to the message.
384     * @param p1 parameter to the message.
385     * @param p2 parameter to the message.
386     */
387    void debug(Marker marker, String message, Object p0, Object p1, Object p2);
388
389    /**
390     * Logs a message with parameters at debug level.
391     *
392     * @param marker the marker data specific to this log statement
393     * @param message the message to log; the format depends on the message factory.
394     * @param p0 parameter to the message.
395     * @param p1 parameter to the message.
396     * @param p2 parameter to the message.
397     * @param p3 parameter to the message.
398     */
399    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
400
401    /**
402     * Logs a message with parameters at debug level.
403     *
404     * @param marker the marker data specific to this log statement
405     * @param message the message to log; the format depends on the message factory.
406     * @param p0 parameter to the message.
407     * @param p1 parameter to the message.
408     * @param p2 parameter to the message.
409     * @param p3 parameter to the message.
410     * @param p4 parameter to the message.
411     */
412    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
413
414    /**
415     * Logs a message with parameters at debug level.
416     *
417     * @param marker the marker data specific to this log statement
418     * @param message the message to log; the format depends on the message factory.
419     * @param p0 parameter to the message.
420     * @param p1 parameter to the message.
421     * @param p2 parameter to the message.
422     * @param p3 parameter to the message.
423     * @param p4 parameter to the message.
424     * @param p5 parameter to the message.
425     */
426    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
427
428    /**
429     * Logs a message with parameters at debug level.
430     *
431     * @param marker the marker data specific to this log statement
432     * @param message the message to log; the format depends on the message factory.
433     * @param p0 parameter to the message.
434     * @param p1 parameter to the message.
435     * @param p2 parameter to the message.
436     * @param p3 parameter to the message.
437     * @param p4 parameter to the message.
438     * @param p5 parameter to the message.
439     * @param p6 parameter to the message.
440     */
441    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
442            Object p6);
443
444    /**
445     * Logs a message with parameters at debug level.
446     *
447     * @param marker the marker data specific to this log statement
448     * @param message the message to log; the format depends on the message factory.
449     * @param p0 parameter to the message.
450     * @param p1 parameter to the message.
451     * @param p2 parameter to the message.
452     * @param p3 parameter to the message.
453     * @param p4 parameter to the message.
454     * @param p5 parameter to the message.
455     * @param p6 parameter to the message.
456     * @param p7 parameter to the message.
457     */
458    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
459            Object p7);
460
461    /**
462     * Logs a message with parameters at debug level.
463     *
464     * @param marker the marker data specific to this log statement
465     * @param message the message to log; the format depends on the message factory.
466     * @param p0 parameter to the message.
467     * @param p1 parameter to the message.
468     * @param p2 parameter to the message.
469     * @param p3 parameter to the message.
470     * @param p4 parameter to the message.
471     * @param p5 parameter to the message.
472     * @param p6 parameter to the message.
473     * @param p7 parameter to the message.
474     * @param p8 parameter to the message.
475     */
476    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
477            Object p7, Object p8);
478
479    /**
480     * Logs a message with parameters at debug level.
481     *
482     * @param marker the marker data specific to this log statement
483     * @param message the message to log; the format depends on the message factory.
484     * @param p0 parameter to the message.
485     * @param p1 parameter to the message.
486     * @param p2 parameter to the message.
487     * @param p3 parameter to the message.
488     * @param p4 parameter to the message.
489     * @param p5 parameter to the message.
490     * @param p6 parameter to the message.
491     * @param p7 parameter to the message.
492     * @param p8 parameter to the message.
493     * @param p9 parameter to the message.
494     */
495    void debug(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
496            Object p7, Object p8, Object p9);
497
498    /**
499     * Logs a message with parameters at debug level.
500     *
501     * @param message the message to log; the format depends on the message factory.
502     * @param p0 parameter to the message.
503     */
504    void debug(String message, Object p0);
505
506    /**
507     * Logs a message with parameters at debug level.
508     *
509     * @param message the message to log; the format depends on the message factory.
510     * @param p0 parameter to the message.
511     * @param p1 parameter to the message.
512     */
513    void debug(String message, Object p0, Object p1);
514
515    /**
516     * Logs a message with parameters at debug level.
517     *
518     * @param message the message to log; the format depends on the message factory.
519     * @param p0 parameter to the message.
520     * @param p1 parameter to the message.
521     * @param p2 parameter to the message.
522     */
523    void debug(String message, Object p0, Object p1, Object p2);
524
525    /**
526     * Logs a message with parameters at debug level.
527     *
528     * @param message the message to log; the format depends on the message factory.
529     * @param p0 parameter to the message.
530     * @param p1 parameter to the message.
531     * @param p2 parameter to the message.
532     * @param p3 parameter to the message.
533     */
534    void debug(String message, Object p0, Object p1, Object p2, Object p3);
535
536    /**
537     * Logs a message with parameters at debug level.
538     *
539     * @param message the message to log; the format depends on the message factory.
540     * @param p0 parameter to the message.
541     * @param p1 parameter to the message.
542     * @param p2 parameter to the message.
543     * @param p3 parameter to the message.
544     * @param p4 parameter to the message.
545     */
546    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
547
548    /**
549     * Logs a message with parameters at debug level.
550     *
551     * @param message the message to log; the format depends on the message factory.
552     * @param p0 parameter to the message.
553     * @param p1 parameter to the message.
554     * @param p2 parameter to the message.
555     * @param p3 parameter to the message.
556     * @param p4 parameter to the message.
557     * @param p5 parameter to the message.
558     */
559    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
560
561    /**
562     * Logs a message with parameters at debug level.
563     *
564     * @param message the message to log; the format depends on the message factory.
565     * @param p0 parameter to the message.
566     * @param p1 parameter to the message.
567     * @param p2 parameter to the message.
568     * @param p3 parameter to the message.
569     * @param p4 parameter to the message.
570     * @param p5 parameter to the message.
571     * @param p6 parameter to the message.
572     */
573    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
574
575    /**
576     * Logs a message with parameters at debug level.
577     *
578     * @param message the message to log; the format depends on the message factory.
579     * @param p0 parameter to the message.
580     * @param p1 parameter to the message.
581     * @param p2 parameter to the message.
582     * @param p3 parameter to the message.
583     * @param p4 parameter to the message.
584     * @param p5 parameter to the message.
585     * @param p6 parameter to the message.
586     * @param p7 parameter to the message.
587     */
588    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
589
590    /**
591     * Logs a message with parameters at debug level.
592     *
593     * @param message the message to log; the format depends on the message factory.
594     * @param p0 parameter to the message.
595     * @param p1 parameter to the message.
596     * @param p2 parameter to the message.
597     * @param p3 parameter to the message.
598     * @param p4 parameter to the message.
599     * @param p5 parameter to the message.
600     * @param p6 parameter to the message.
601     * @param p7 parameter to the message.
602     * @param p8 parameter to the message.
603     */
604    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
605            Object p8);
606
607    /**
608     * Logs a message with parameters at debug level.
609     *
610     * @param message the message to log; the format depends on the message factory.
611     * @param p0 parameter to the message.
612     * @param p1 parameter to the message.
613     * @param p2 parameter to the message.
614     * @param p3 parameter to the message.
615     * @param p4 parameter to the message.
616     * @param p5 parameter to the message.
617     * @param p6 parameter to the message.
618     * @param p7 parameter to the message.
619     * @param p8 parameter to the message.
620     * @param p9 parameter to the message.
621     */
622    void debug(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
623            Object p8, Object p9);
624
625    /**
626     * Logs entry to a method. Used when the method in question has no parameters or when the parameters should not be
627     * logged.
628     * @deprecated Use {@link #traceEntry()} instead which performs the same function.
629     */
630    @Deprecated
631    void entry();
632
633    /**
634     * Logs entry to a method along with its parameters (consider using one of the {@code traceEntry(...)} methods instead.)
635     * <p>
636     * For example:
637     * </p>
638     * <pre>
639     * public void doSomething(String foo, int bar) {
640     *     LOGGER.entry(foo, bar);
641     *     // do something
642     * }
643     * </pre>
644     * <p>
645     * The use of methods such as this are more effective when combined with aspect-oriented programming or other
646     * bytecode manipulation tools. It can be rather tedious (and messy) to use this type of method manually.
647     * </p>
648     *
649     * @param params The parameters to the method.
650     * @deprecated Use {@link #traceEntry(String, Object...)} instead which performs the same function.
651     */
652    @Deprecated
653    void entry(Object... params);
654
655    /**
656     * Logs a message with the specific Marker at the {@link Level#ERROR ERROR} level.
657     *
658     * @param marker the marker data specific to this log statement
659     * @param message the message string to be logged
660     */
661    void error(Marker marker, Message message);
662
663    /**
664     * Logs a message with the specific Marker at the {@link Level#ERROR ERROR} level.
665     *
666     * @param marker the marker data specific to this log statement
667     * @param message the message string to be logged
668     * @param throwable A Throwable or null.
669     */
670    void error(Marker marker, Message message, Throwable throwable);
671
672    /**
673     * Logs a message which is only to be constructed if the logging level is the {@link Level#ERROR ERROR} level with
674     * the specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
675     * {@code Message}.
676     *
677     * @param marker the marker data specific to this log statement
678     * @param messageSupplier A function, which when called, produces the desired log message.
679     * @since 2.4
680     */
681    void error(Marker marker, MessageSupplier messageSupplier);
682
683    /**
684     * Logs a message (only to be constructed if the logging level is the {@link Level#ERROR ERROR} level) with the
685     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The
686     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
687     *
688     * @param marker the marker data specific to this log statement
689     * @param messageSupplier A function, which when called, produces the desired log message.
690     * @param throwable A Throwable or null.
691     * @since 2.4
692     */
693    void error(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
694
695    /**
696     * Logs a message CharSequence with the {@link Level#ERROR ERROR} level.
697     *
698     * @param marker the marker data specific to this log statement.
699     * @param message the message CharSequence to log.
700     */
701    void error(Marker marker, CharSequence message);
702
703    /**
704     * Logs a CharSequence at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
705     * <code>throwable</code> passed as parameter.
706     *
707     * @param marker the marker data specific to this log statement.
708     * @param message the message CharSequence to log.
709     * @param throwable the {@code Throwable} to log, including its stack trace.
710     */
711    void error(Marker marker, CharSequence message, Throwable throwable);
712
713    /**
714     * Logs a message object with the {@link Level#ERROR ERROR} level.
715     *
716     * @param marker the marker data specific to this log statement.
717     * @param message the message object to log.
718     */
719    void error(Marker marker, Object message);
720
721    /**
722     * Logs a message at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
723     * <code>throwable</code> passed as parameter.
724     *
725     * @param marker the marker data specific to this log statement.
726     * @param message the message object to log.
727     * @param throwable the {@code Throwable} to log, including its stack trace.
728     */
729    void error(Marker marker, Object message, Throwable throwable);
730
731    /**
732     * Logs a message object with the {@link Level#ERROR ERROR} level.
733     *
734     * @param marker the marker data specific to this log statement.
735     * @param message the message object to log.
736     */
737    void error(Marker marker, String message);
738
739    /**
740     * Logs a message with parameters at the {@link Level#ERROR ERROR} level.
741     *
742     * @param marker the marker data specific to this log statement.
743     * @param message the message to log; the format depends on the message factory.
744     * @param params parameters to the message.
745     * @see #getMessageFactory()
746     */
747    void error(Marker marker, String message, Object... params);
748
749    /**
750     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#ERROR
751     * ERROR} level.
752     *
753     * @param marker the marker data specific to this log statement
754     * @param message the message to log; the format depends on the message factory.
755     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
756     * @since 2.4
757     */
758    void error(Marker marker, String message, Supplier<?>... paramSuppliers);
759
760    /**
761     * Logs a message at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
762     * <code>throwable</code> passed as parameter.
763     *
764     * @param marker the marker data specific to this log statement.
765     * @param message the message object to log.
766     * @param throwable the {@code Throwable} to log, including its stack trace.
767     */
768    void error(Marker marker, String message, Throwable throwable);
769
770    /**
771     * Logs a message which is only to be constructed if the logging level is the {@link Level#ERROR ERROR} level with
772     * the specified Marker.
773     *
774     * @param marker the marker data specific to this log statement
775     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
776     *            message factory.
777     * @since 2.4
778     */
779    void error(Marker marker, Supplier<?> messageSupplier);
780
781    /**
782     * Logs a message (only to be constructed if the logging level is the {@link Level#ERROR ERROR} level) with the
783     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
784     *
785     * @param marker the marker data specific to this log statement
786     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
787     *            message factory.
788     * @param throwable A Throwable or null.
789     * @since 2.4
790     */
791    void error(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
792
793    /**
794     * Logs a message with the specific Marker at the {@link Level#ERROR ERROR} level.
795     *
796     * @param message the message string to be logged
797     */
798    void error(Message message);
799
800    /**
801     * Logs a message with the specific Marker at the {@link Level#ERROR ERROR} level.
802     *
803     * @param message the message string to be logged
804     * @param throwable A Throwable or null.
805     */
806    void error(Message message, Throwable throwable);
807
808    /**
809     * Logs a message which is only to be constructed if the logging level is the {@link Level#ERROR ERROR} level. The
810     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
811     *
812     * @param messageSupplier A function, which when called, produces the desired log message.
813     * @since 2.4
814     */
815    void error(MessageSupplier messageSupplier);
816
817    /**
818     * Logs a message (only to be constructed if the logging level is the {@link Level#ERROR ERROR} level) including the
819     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
820     * not use the {@link MessageFactory} to construct the {@code Message}.
821     *
822     * @param messageSupplier A function, which when called, produces the desired log message.
823     * @param throwable the {@code Throwable} to log, including its stack trace.
824     * @since 2.4
825     */
826    void error(MessageSupplier messageSupplier, Throwable throwable);
827
828    /**
829     * Logs a message CharSequence with the {@link Level#ERROR ERROR} level.
830     *
831     * @param message the message CharSequence to log.
832     */
833    void error(CharSequence message);
834
835    /**
836     * Logs a CharSequence at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
837     * <code>throwable</code> passed as parameter.
838     *
839     * @param message the message CharSequence to log.
840     * @param throwable the {@code Throwable} to log, including its stack trace.
841     */
842    void error(CharSequence message, Throwable throwable);
843
844    /**
845     * Logs a message object with the {@link Level#ERROR ERROR} level.
846     *
847     * @param message the message object to log.
848     */
849    void error(Object message);
850
851    /**
852     * Logs a message at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
853     * <code>throwable</code> passed as parameter.
854     *
855     * @param message the message object to log.
856     * @param throwable the {@code Throwable} to log, including its stack trace.
857     */
858    void error(Object message, Throwable throwable);
859
860    /**
861     * Logs a message object with the {@link Level#ERROR ERROR} level.
862     *
863     * @param message the message string to log.
864     */
865    void error(String message);
866
867    /**
868     * Logs a message with parameters at the {@link Level#ERROR ERROR} level.
869     *
870     * @param message the message to log; the format depends on the message factory.
871     * @param params parameters to the message.
872     * @see #getMessageFactory()
873     */
874    void error(String message, Object... params);
875
876    /**
877     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#ERROR
878     * ERROR} level.
879     *
880     * @param message the message to log; the format depends on the message factory.
881     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
882     * @since 2.4
883     */
884    void error(String message, Supplier<?>... paramSuppliers);
885
886    /**
887     * Logs a message at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
888     * <code>throwable</code> passed as parameter.
889     *
890     * @param message the message object to log.
891     * @param throwable the {@code Throwable} to log, including its stack trace.
892     */
893    void error(String message, Throwable throwable);
894
895    /**
896     * Logs a message which is only to be constructed if the logging level is the {@link Level#ERROR ERROR} level.
897     *
898     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
899     *            message factory.
900     * @since 2.4
901     */
902    void error(Supplier<?> messageSupplier);
903
904    /**
905     * Logs a message (only to be constructed if the logging level is the {@link Level#ERROR ERROR} level) including the
906     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
907     *
908     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
909     *            message factory.
910     * @param throwable the {@code Throwable} to log, including its stack trace.
911     * @since 2.4
912     */
913    void error(Supplier<?> messageSupplier, Throwable throwable);
914
915    /**
916     * Logs a message with parameters at error level.
917     *
918     * @param marker the marker data specific to this log statement
919     * @param message the message to log; the format depends on the message factory.
920     * @param p0 parameter to the message.
921     */
922    void error(Marker marker, String message, Object p0);
923
924    /**
925     * Logs a message with parameters at error level.
926     *
927     * @param marker the marker data specific to this log statement
928     * @param message the message to log; the format depends on the message factory.
929     * @param p0 parameter to the message.
930     * @param p1 parameter to the message.
931     */
932    void error(Marker marker, String message, Object p0, Object p1);
933
934    /**
935     * Logs a message with parameters at error level.
936     *
937     * @param marker the marker data specific to this log statement
938     * @param message the message to log; the format depends on the message factory.
939     * @param p0 parameter to the message.
940     * @param p1 parameter to the message.
941     * @param p2 parameter to the message.
942     */
943    void error(Marker marker, String message, Object p0, Object p1, Object p2);
944
945    /**
946     * Logs a message with parameters at error level.
947     *
948     * @param marker the marker data specific to this log statement
949     * @param message the message to log; the format depends on the message factory.
950     * @param p0 parameter to the message.
951     * @param p1 parameter to the message.
952     * @param p2 parameter to the message.
953     * @param p3 parameter to the message.
954     */
955    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
956
957    /**
958     * Logs a message with parameters at error level.
959     *
960     * @param marker the marker data specific to this log statement
961     * @param message the message to log; the format depends on the message factory.
962     * @param p0 parameter to the message.
963     * @param p1 parameter to the message.
964     * @param p2 parameter to the message.
965     * @param p3 parameter to the message.
966     * @param p4 parameter to the message.
967     */
968    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
969
970    /**
971     * Logs a message with parameters at error level.
972     *
973     * @param marker the marker data specific to this log statement
974     * @param message the message to log; the format depends on the message factory.
975     * @param p0 parameter to the message.
976     * @param p1 parameter to the message.
977     * @param p2 parameter to the message.
978     * @param p3 parameter to the message.
979     * @param p4 parameter to the message.
980     * @param p5 parameter to the message.
981     */
982    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
983
984    /**
985     * Logs a message with parameters at error level.
986     *
987     * @param marker the marker data specific to this log statement
988     * @param message the message to log; the format depends on the message factory.
989     * @param p0 parameter to the message.
990     * @param p1 parameter to the message.
991     * @param p2 parameter to the message.
992     * @param p3 parameter to the message.
993     * @param p4 parameter to the message.
994     * @param p5 parameter to the message.
995     * @param p6 parameter to the message.
996     */
997    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
998            Object p6);
999
1000    /**
1001     * Logs a message with parameters at error level.
1002     *
1003     * @param marker the marker data specific to this log statement
1004     * @param message the message to log; the format depends on the message factory.
1005     * @param p0 parameter to the message.
1006     * @param p1 parameter to the message.
1007     * @param p2 parameter to the message.
1008     * @param p3 parameter to the message.
1009     * @param p4 parameter to the message.
1010     * @param p5 parameter to the message.
1011     * @param p6 parameter to the message.
1012     * @param p7 parameter to the message.
1013     */
1014    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1015            Object p7);
1016
1017    /**
1018     * Logs a message with parameters at error level.
1019     *
1020     * @param marker the marker data specific to this log statement
1021     * @param message the message to log; the format depends on the message factory.
1022     * @param p0 parameter to the message.
1023     * @param p1 parameter to the message.
1024     * @param p2 parameter to the message.
1025     * @param p3 parameter to the message.
1026     * @param p4 parameter to the message.
1027     * @param p5 parameter to the message.
1028     * @param p6 parameter to the message.
1029     * @param p7 parameter to the message.
1030     * @param p8 parameter to the message.
1031     */
1032    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1033            Object p7, Object p8);
1034
1035    /**
1036     * Logs a message with parameters at error level.
1037     *
1038     * @param marker the marker data specific to this log statement
1039     * @param message the message to log; the format depends on the message factory.
1040     * @param p0 parameter to the message.
1041     * @param p1 parameter to the message.
1042     * @param p2 parameter to the message.
1043     * @param p3 parameter to the message.
1044     * @param p4 parameter to the message.
1045     * @param p5 parameter to the message.
1046     * @param p6 parameter to the message.
1047     * @param p7 parameter to the message.
1048     * @param p8 parameter to the message.
1049     * @param p9 parameter to the message.
1050     */
1051    void error(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1052            Object p7, Object p8, Object p9);
1053
1054    /**
1055     * Logs a message with parameters at error level.
1056     *
1057     * @param message the message to log; the format depends on the message factory.
1058     * @param p0 parameter to the message.
1059     */
1060    void error(String message, Object p0);
1061
1062    /**
1063     * Logs a message with parameters at error level.
1064     *
1065     * @param message the message to log; the format depends on the message factory.
1066     * @param p0 parameter to the message.
1067     * @param p1 parameter to the message.
1068     */
1069    void error(String message, Object p0, Object p1);
1070
1071    /**
1072     * Logs a message with parameters at error level.
1073     *
1074     * @param message the message to log; the format depends on the message factory.
1075     * @param p0 parameter to the message.
1076     * @param p1 parameter to the message.
1077     * @param p2 parameter to the message.
1078     */
1079    void error(String message, Object p0, Object p1, Object p2);
1080
1081    /**
1082     * Logs a message with parameters at error level.
1083     *
1084     * @param message the message to log; the format depends on the message factory.
1085     * @param p0 parameter to the message.
1086     * @param p1 parameter to the message.
1087     * @param p2 parameter to the message.
1088     * @param p3 parameter to the message.
1089     */
1090    void error(String message, Object p0, Object p1, Object p2, Object p3);
1091
1092    /**
1093     * Logs a message with parameters at error level.
1094     *
1095     * @param message the message to log; the format depends on the message factory.
1096     * @param p0 parameter to the message.
1097     * @param p1 parameter to the message.
1098     * @param p2 parameter to the message.
1099     * @param p3 parameter to the message.
1100     * @param p4 parameter to the message.
1101     */
1102    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
1103
1104    /**
1105     * Logs a message with parameters at error level.
1106     *
1107     * @param message the message to log; the format depends on the message factory.
1108     * @param p0 parameter to the message.
1109     * @param p1 parameter to the message.
1110     * @param p2 parameter to the message.
1111     * @param p3 parameter to the message.
1112     * @param p4 parameter to the message.
1113     * @param p5 parameter to the message.
1114     */
1115    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
1116
1117    /**
1118     * Logs a message with parameters at error level.
1119     *
1120     * @param message the message to log; the format depends on the message factory.
1121     * @param p0 parameter to the message.
1122     * @param p1 parameter to the message.
1123     * @param p2 parameter to the message.
1124     * @param p3 parameter to the message.
1125     * @param p4 parameter to the message.
1126     * @param p5 parameter to the message.
1127     * @param p6 parameter to the message.
1128     */
1129    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
1130
1131    /**
1132     * Logs a message with parameters at error level.
1133     *
1134     * @param message the message to log; the format depends on the message factory.
1135     * @param p0 parameter to the message.
1136     * @param p1 parameter to the message.
1137     * @param p2 parameter to the message.
1138     * @param p3 parameter to the message.
1139     * @param p4 parameter to the message.
1140     * @param p5 parameter to the message.
1141     * @param p6 parameter to the message.
1142     * @param p7 parameter to the message.
1143     */
1144    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
1145
1146    /**
1147     * Logs a message with parameters at error level.
1148     *
1149     * @param message the message to log; the format depends on the message factory.
1150     * @param p0 parameter to the message.
1151     * @param p1 parameter to the message.
1152     * @param p2 parameter to the message.
1153     * @param p3 parameter to the message.
1154     * @param p4 parameter to the message.
1155     * @param p5 parameter to the message.
1156     * @param p6 parameter to the message.
1157     * @param p7 parameter to the message.
1158     * @param p8 parameter to the message.
1159     */
1160    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
1161            Object p8);
1162
1163    /**
1164     * Logs a message with parameters at error level.
1165     *
1166     * @param message the message to log; the format depends on the message factory.
1167     * @param p0 parameter to the message.
1168     * @param p1 parameter to the message.
1169     * @param p2 parameter to the message.
1170     * @param p3 parameter to the message.
1171     * @param p4 parameter to the message.
1172     * @param p5 parameter to the message.
1173     * @param p6 parameter to the message.
1174     * @param p7 parameter to the message.
1175     * @param p8 parameter to the message.
1176     * @param p9 parameter to the message.
1177     */
1178    void error(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
1179            Object p8, Object p9);
1180
1181    /**
1182     * Logs exit from a method. Used for methods that do not return anything.
1183     * @deprecated Use {@link #traceExit()} instead which performs the same function.
1184     */
1185    @Deprecated
1186    void exit();
1187
1188    /**
1189     * Logs exiting from a method with the result. This may be coded as:
1190     *
1191     * <pre>
1192     * return LOGGER.exit(myResult);
1193     * </pre>
1194     *
1195     * @param <R> The type of the parameter and object being returned.
1196     * @param result The result being returned from the method call.
1197     * @return the result.
1198     * @deprecated Use {@link #traceExit(Object)} instead which performs the same function.
1199     */
1200    @Deprecated
1201    <R> R exit(R result);
1202
1203    /**
1204     * Logs a message with the specific Marker at the {@link Level#FATAL FATAL} level.
1205     *
1206     * @param marker the marker data specific to this log statement
1207     * @param message the message string to be logged
1208     */
1209    void fatal(Marker marker, Message message);
1210
1211    /**
1212     * Logs a message with the specific Marker at the {@link Level#FATAL FATAL} level.
1213     *
1214     * @param marker the marker data specific to this log statement
1215     * @param message the message string to be logged
1216     * @param throwable A Throwable or null.
1217     */
1218    void fatal(Marker marker, Message message, Throwable throwable);
1219
1220    /**
1221     * Logs a message which is only to be constructed if the logging level is the {@link Level#FATAL FATAL} level with
1222     * the specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
1223     * {@code Message}.
1224     *
1225     * @param marker the marker data specific to this log statement
1226     * @param messageSupplier A function, which when called, produces the desired log message.
1227     * @since 2.4
1228     */
1229    void fatal(Marker marker, MessageSupplier messageSupplier);
1230
1231    /**
1232     * Logs a message (only to be constructed if the logging level is the {@link Level#FATAL FATAL} level) with the
1233     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The
1234     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
1235     *
1236     * @param marker the marker data specific to this log statement
1237     * @param messageSupplier A function, which when called, produces the desired log message.
1238     * @param throwable A Throwable or null.
1239     * @since 2.4
1240     */
1241    void fatal(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
1242
1243    /**
1244     * Logs a message CharSequence with the {@link Level#FATAL FATAL} level.
1245     *
1246     * @param marker The marker data specific to this log statement.
1247     * @param message the message CharSequence to log.
1248     */
1249    void fatal(Marker marker, CharSequence message);
1250
1251    /**
1252     * Logs a CharSequence at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1253     * <code>throwable</code> passed as parameter.
1254     *
1255     * @param marker The marker data specific to this log statement.
1256     * @param message the message CharSequence to log.
1257     * @param throwable the {@code Throwable} to log, including its stack trace.
1258     */
1259    void fatal(Marker marker, CharSequence message, Throwable throwable);
1260
1261    /**
1262     * Logs a message object with the {@link Level#FATAL FATAL} level.
1263     *
1264     * @param marker The marker data specific to this log statement.
1265     * @param message the message object to log.
1266     */
1267    void fatal(Marker marker, Object message);
1268
1269    /**
1270     * Logs a message at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1271     * <code>throwable</code> passed as parameter.
1272     *
1273     * @param marker The marker data specific to this log statement.
1274     * @param message the message object to log.
1275     * @param throwable the {@code Throwable} to log, including its stack trace.
1276     */
1277    void fatal(Marker marker, Object message, Throwable throwable);
1278
1279    /**
1280     * Logs a message object with the {@link Level#FATAL FATAL} level.
1281     *
1282     * @param marker The marker data specific to this log statement.
1283     * @param message the message object to log.
1284     */
1285    void fatal(Marker marker, String message);
1286
1287    /**
1288     * Logs a message with parameters at the {@link Level#FATAL FATAL} level.
1289     *
1290     * @param marker The marker data specific to this log statement.
1291     * @param message the message to log; the format depends on the message factory.
1292     * @param params parameters to the message.
1293     * @see #getMessageFactory()
1294     */
1295    void fatal(Marker marker, String message, Object... params);
1296
1297    /**
1298     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#FATAL
1299     * FATAL} level.
1300     *
1301     * @param marker the marker data specific to this log statement
1302     * @param message the message to log; the format depends on the message factory.
1303     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
1304     * @since 2.4
1305     */
1306    void fatal(Marker marker, String message, Supplier<?>... paramSuppliers);
1307
1308    /**
1309     * Logs a message at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1310     * <code>throwable</code> passed as parameter.
1311     *
1312     * @param marker The marker data specific to this log statement.
1313     * @param message the message object to log.
1314     * @param throwable the {@code Throwable} to log, including its stack trace.
1315     */
1316    void fatal(Marker marker, String message, Throwable throwable);
1317
1318    /**
1319     * Logs a message which is only to be constructed if the logging level is the {@link Level#FATAL FATAL} level with
1320     * the specified Marker.
1321     *
1322     * @param marker the marker data specific to this log statement
1323     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1324     *            message factory.
1325     * @since 2.4
1326     */
1327    void fatal(Marker marker, Supplier<?> messageSupplier);
1328
1329    /**
1330     * Logs a message (only to be constructed if the logging level is the {@link Level#FATAL FATAL} level) with the
1331     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
1332     *
1333     * @param marker the marker data specific to this log statement
1334     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1335     *            message factory.
1336     * @param throwable A Throwable or null.
1337     * @since 2.4
1338     */
1339    void fatal(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
1340
1341    /**
1342     * Logs a message with the specific Marker at the {@link Level#FATAL FATAL} level.
1343     *
1344     * @param message the message string to be logged
1345     */
1346    void fatal(Message message);
1347
1348    /**
1349     * Logs a message with the specific Marker at the {@link Level#FATAL FATAL} level.
1350     *
1351     * @param message the message string to be logged
1352     * @param throwable A Throwable or null.
1353     */
1354    void fatal(Message message, Throwable throwable);
1355
1356    /**
1357     * Logs a message which is only to be constructed if the logging level is the {@link Level#FATAL FATAL} level. The
1358     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
1359     *
1360     * @param messageSupplier A function, which when called, produces the desired log message.
1361     * @since 2.4
1362     */
1363    void fatal(MessageSupplier messageSupplier);
1364
1365    /**
1366     * Logs a message (only to be constructed if the logging level is the {@link Level#FATAL FATAL} level) including the
1367     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
1368     * not use the {@link MessageFactory} to construct the {@code Message}.
1369     *
1370     * @param messageSupplier A function, which when called, produces the desired log message.
1371     * @param throwable the {@code Throwable} to log, including its stack trace.
1372     * @since 2.4
1373     */
1374    void fatal(MessageSupplier messageSupplier, Throwable throwable);
1375
1376    /**
1377     * Logs a message CharSequence with the {@link Level#FATAL FATAL} level.
1378     *
1379     * @param message the message CharSequence to log.
1380     */
1381    void fatal(CharSequence message);
1382
1383    /**
1384     * Logs a CharSequence at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1385     * <code>throwable</code> passed as parameter.
1386     *
1387     * @param message the message CharSequence to log.
1388     * @param throwable the {@code Throwable} to log, including its stack trace.
1389     */
1390    void fatal(CharSequence message, Throwable throwable);
1391
1392    /**
1393     * Logs a message object with the {@link Level#FATAL FATAL} level.
1394     *
1395     * @param message the message object to log.
1396     */
1397    void fatal(Object message);
1398
1399    /**
1400     * Logs a message at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1401     * <code>throwable</code> passed as parameter.
1402     *
1403     * @param message the message object to log.
1404     * @param throwable the {@code Throwable} to log, including its stack trace.
1405     */
1406    void fatal(Object message, Throwable throwable);
1407
1408    /**
1409     * Logs a message object with the {@link Level#FATAL FATAL} level.
1410     *
1411     * @param message the message string to log.
1412     */
1413    void fatal(String message);
1414
1415    /**
1416     * Logs a message with parameters at the {@link Level#FATAL FATAL} level.
1417     *
1418     * @param message the message to log; the format depends on the message factory.
1419     * @param params parameters to the message.
1420     * @see #getMessageFactory()
1421     */
1422    void fatal(String message, Object... params);
1423
1424    /**
1425     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#FATAL
1426     * FATAL} level.
1427     *
1428     * @param message the message to log; the format depends on the message factory.
1429     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
1430     * @since 2.4
1431     */
1432    void fatal(String message, Supplier<?>... paramSuppliers);
1433
1434    /**
1435     * Logs a message at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
1436     * <code>throwable</code> passed as parameter.
1437     *
1438     * @param message the message object to log.
1439     * @param throwable the {@code Throwable} to log, including its stack trace.
1440     */
1441    void fatal(String message, Throwable throwable);
1442
1443    /**
1444     * Logs a message which is only to be constructed if the logging level is the {@link Level#FATAL FATAL} level.
1445     *
1446     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1447     *            message factory.
1448     * @since 2.4
1449     */
1450    void fatal(Supplier<?> messageSupplier);
1451
1452    /**
1453     * Logs a message (only to be constructed if the logging level is the {@link Level#FATAL FATAL} level) including the
1454     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
1455     *
1456     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1457     *            message factory.
1458     * @param throwable the {@code Throwable} to log, including its stack trace.
1459     * @since 2.4
1460     */
1461    void fatal(Supplier<?> messageSupplier, Throwable throwable);
1462
1463    /**
1464     * Logs a message with parameters at fatal level.
1465     *
1466     * @param marker the marker data specific to this log statement
1467     * @param message the message to log; the format depends on the message factory.
1468     * @param p0 parameter to the message.
1469     */
1470    void fatal(Marker marker, String message, Object p0);
1471
1472    /**
1473     * Logs a message with parameters at fatal level.
1474     *
1475     * @param marker the marker data specific to this log statement
1476     * @param message the message to log; the format depends on the message factory.
1477     * @param p0 parameter to the message.
1478     * @param p1 parameter to the message.
1479     */
1480    void fatal(Marker marker, String message, Object p0, Object p1);
1481
1482    /**
1483     * Logs a message with parameters at fatal level.
1484     *
1485     * @param marker the marker data specific to this log statement
1486     * @param message the message to log; the format depends on the message factory.
1487     * @param p0 parameter to the message.
1488     * @param p1 parameter to the message.
1489     * @param p2 parameter to the message.
1490     */
1491    void fatal(Marker marker, String message, Object p0, Object p1, Object p2);
1492
1493    /**
1494     * Logs a message with parameters at fatal level.
1495     *
1496     * @param marker the marker data specific to this log statement
1497     * @param message the message to log; the format depends on the message factory.
1498     * @param p0 parameter to the message.
1499     * @param p1 parameter to the message.
1500     * @param p2 parameter to the message.
1501     * @param p3 parameter to the message.
1502     */
1503    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
1504
1505    /**
1506     * Logs a message with parameters at fatal level.
1507     *
1508     * @param marker the marker data specific to this log statement
1509     * @param message the message to log; the format depends on the message factory.
1510     * @param p0 parameter to the message.
1511     * @param p1 parameter to the message.
1512     * @param p2 parameter to the message.
1513     * @param p3 parameter to the message.
1514     * @param p4 parameter to the message.
1515     */
1516    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
1517
1518    /**
1519     * Logs a message with parameters at fatal level.
1520     *
1521     * @param marker the marker data specific to this log statement
1522     * @param message the message to log; the format depends on the message factory.
1523     * @param p0 parameter to the message.
1524     * @param p1 parameter to the message.
1525     * @param p2 parameter to the message.
1526     * @param p3 parameter to the message.
1527     * @param p4 parameter to the message.
1528     * @param p5 parameter to the message.
1529     */
1530    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
1531
1532    /**
1533     * Logs a message with parameters at fatal level.
1534     *
1535     * @param marker the marker data specific to this log statement
1536     * @param message the message to log; the format depends on the message factory.
1537     * @param p0 parameter to the message.
1538     * @param p1 parameter to the message.
1539     * @param p2 parameter to the message.
1540     * @param p3 parameter to the message.
1541     * @param p4 parameter to the message.
1542     * @param p5 parameter to the message.
1543     * @param p6 parameter to the message.
1544     */
1545    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
1546            Object p6);
1547
1548    /**
1549     * Logs a message with parameters at fatal level.
1550     *
1551     * @param marker the marker data specific to this log statement
1552     * @param message the message to log; the format depends on the message factory.
1553     * @param p0 parameter to the message.
1554     * @param p1 parameter to the message.
1555     * @param p2 parameter to the message.
1556     * @param p3 parameter to the message.
1557     * @param p4 parameter to the message.
1558     * @param p5 parameter to the message.
1559     * @param p6 parameter to the message.
1560     * @param p7 parameter to the message.
1561     */
1562    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1563            Object p7);
1564
1565    /**
1566     * Logs a message with parameters at fatal level.
1567     *
1568     * @param marker the marker data specific to this log statement
1569     * @param message the message to log; the format depends on the message factory.
1570     * @param p0 parameter to the message.
1571     * @param p1 parameter to the message.
1572     * @param p2 parameter to the message.
1573     * @param p3 parameter to the message.
1574     * @param p4 parameter to the message.
1575     * @param p5 parameter to the message.
1576     * @param p6 parameter to the message.
1577     * @param p7 parameter to the message.
1578     * @param p8 parameter to the message.
1579     */
1580    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1581            Object p7, Object p8);
1582
1583    /**
1584     * Logs a message with parameters at fatal level.
1585     *
1586     * @param marker the marker data specific to this log statement
1587     * @param message the message to log; the format depends on the message factory.
1588     * @param p0 parameter to the message.
1589     * @param p1 parameter to the message.
1590     * @param p2 parameter to the message.
1591     * @param p3 parameter to the message.
1592     * @param p4 parameter to the message.
1593     * @param p5 parameter to the message.
1594     * @param p6 parameter to the message.
1595     * @param p7 parameter to the message.
1596     * @param p8 parameter to the message.
1597     * @param p9 parameter to the message.
1598     */
1599    void fatal(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
1600            Object p7, Object p8, Object p9);
1601
1602    /**
1603     * Logs a message with parameters at fatal level.
1604     *
1605     * @param message the message to log; the format depends on the message factory.
1606     * @param p0 parameter to the message.
1607     */
1608    void fatal(String message, Object p0);
1609
1610    /**
1611     * Logs a message with parameters at fatal level.
1612     *
1613     * @param message the message to log; the format depends on the message factory.
1614     * @param p0 parameter to the message.
1615     * @param p1 parameter to the message.
1616     */
1617    void fatal(String message, Object p0, Object p1);
1618
1619    /**
1620     * Logs a message with parameters at fatal level.
1621     *
1622     * @param message the message to log; the format depends on the message factory.
1623     * @param p0 parameter to the message.
1624     * @param p1 parameter to the message.
1625     * @param p2 parameter to the message.
1626     */
1627    void fatal(String message, Object p0, Object p1, Object p2);
1628
1629    /**
1630     * Logs a message with parameters at fatal level.
1631     *
1632     * @param message the message to log; the format depends on the message factory.
1633     * @param p0 parameter to the message.
1634     * @param p1 parameter to the message.
1635     * @param p2 parameter to the message.
1636     * @param p3 parameter to the message.
1637     */
1638    void fatal(String message, Object p0, Object p1, Object p2, Object p3);
1639
1640    /**
1641     * Logs a message with parameters at fatal level.
1642     *
1643     * @param message the message to log; the format depends on the message factory.
1644     * @param p0 parameter to the message.
1645     * @param p1 parameter to the message.
1646     * @param p2 parameter to the message.
1647     * @param p3 parameter to the message.
1648     * @param p4 parameter to the message.
1649     */
1650    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
1651
1652    /**
1653     * Logs a message with parameters at fatal level.
1654     *
1655     * @param message the message to log; the format depends on the message factory.
1656     * @param p0 parameter to the message.
1657     * @param p1 parameter to the message.
1658     * @param p2 parameter to the message.
1659     * @param p3 parameter to the message.
1660     * @param p4 parameter to the message.
1661     * @param p5 parameter to the message.
1662     */
1663    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
1664
1665    /**
1666     * Logs a message with parameters at fatal level.
1667     *
1668     * @param message the message to log; the format depends on the message factory.
1669     * @param p0 parameter to the message.
1670     * @param p1 parameter to the message.
1671     * @param p2 parameter to the message.
1672     * @param p3 parameter to the message.
1673     * @param p4 parameter to the message.
1674     * @param p5 parameter to the message.
1675     * @param p6 parameter to the message.
1676     */
1677    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
1678
1679    /**
1680     * Logs a message with parameters at fatal level.
1681     *
1682     * @param message the message to log; the format depends on the message factory.
1683     * @param p0 parameter to the message.
1684     * @param p1 parameter to the message.
1685     * @param p2 parameter to the message.
1686     * @param p3 parameter to the message.
1687     * @param p4 parameter to the message.
1688     * @param p5 parameter to the message.
1689     * @param p6 parameter to the message.
1690     * @param p7 parameter to the message.
1691     */
1692    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
1693
1694    /**
1695     * Logs a message with parameters at fatal level.
1696     *
1697     * @param message the message to log; the format depends on the message factory.
1698     * @param p0 parameter to the message.
1699     * @param p1 parameter to the message.
1700     * @param p2 parameter to the message.
1701     * @param p3 parameter to the message.
1702     * @param p4 parameter to the message.
1703     * @param p5 parameter to the message.
1704     * @param p6 parameter to the message.
1705     * @param p7 parameter to the message.
1706     * @param p8 parameter to the message.
1707     */
1708    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
1709            Object p8);
1710
1711    /**
1712     * Logs a message with parameters at fatal level.
1713     *
1714     * @param message the message to log; the format depends on the message factory.
1715     * @param p0 parameter to the message.
1716     * @param p1 parameter to the message.
1717     * @param p2 parameter to the message.
1718     * @param p3 parameter to the message.
1719     * @param p4 parameter to the message.
1720     * @param p5 parameter to the message.
1721     * @param p6 parameter to the message.
1722     * @param p7 parameter to the message.
1723     * @param p8 parameter to the message.
1724     * @param p9 parameter to the message.
1725     */
1726    void fatal(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
1727            Object p8, Object p9);
1728
1729    /**
1730     * Gets the Level associated with the Logger.
1731     *
1732     * @return the Level associate with the Logger.
1733     */
1734    Level getLevel();
1735
1736    /**
1737     * Gets the message factory used to convert message Objects and Strings/CharSequences into actual log Messages.
1738     *
1739     * Since version 2.6, Log4j internally uses message factories that implement the {@link MessageFactory2} interface.
1740     * From version 2.6.2, the return type of this method was changed from {@link MessageFactory} to
1741     * {@code <MF extends MessageFactory> MF}. The returned factory will always implement {@link MessageFactory2},
1742     * but the return type of this method could not be changed to {@link MessageFactory2} without breaking binary
1743     * compatibility.
1744     *
1745     * @return the message factory, as an instance of {@link MessageFactory2}
1746     */
1747    <MF extends MessageFactory> MF getMessageFactory();
1748
1749    /**
1750     * Gets the logger name.
1751     *
1752     * @return the logger name.
1753     */
1754    String getName();
1755
1756    /**
1757     * Logs a message with the specific Marker at the {@link Level#INFO INFO} level.
1758     *
1759     * @param marker the marker data specific to this log statement
1760     * @param message the message string to be logged
1761     */
1762    void info(Marker marker, Message message);
1763
1764    /**
1765     * Logs a message with the specific Marker at the {@link Level#INFO INFO} level.
1766     *
1767     * @param marker the marker data specific to this log statement
1768     * @param message the message string to be logged
1769     * @param throwable A Throwable or null.
1770     */
1771    void info(Marker marker, Message message, Throwable throwable);
1772
1773    /**
1774     * Logs a message which is only to be constructed if the logging level is the {@link Level#INFO INFO} level with the
1775     * specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
1776     * {@code Message}.
1777     *
1778     * @param marker the marker data specific to this log statement
1779     * @param messageSupplier A function, which when called, produces the desired log message.
1780     * @since 2.4
1781     */
1782    void info(Marker marker, MessageSupplier messageSupplier);
1783
1784    /**
1785     * Logs a message (only to be constructed if the logging level is the {@link Level#INFO INFO} level) with the
1786     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The
1787     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
1788     *
1789     * @param marker the marker data specific to this log statement
1790     * @param messageSupplier A function, which when called, produces the desired log message.
1791     * @param throwable A Throwable or null.
1792     * @since 2.4
1793     */
1794    void info(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
1795
1796    /**
1797     * Logs a message CharSequence with the {@link Level#INFO INFO} level.
1798     *
1799     * @param marker the marker data specific to this log statement
1800     * @param message the message CharSequence to log.
1801     */
1802    void info(Marker marker, CharSequence message);
1803
1804    /**
1805     * Logs a CharSequence at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1806     * <code>throwable</code> passed as parameter.
1807     *
1808     * @param marker the marker data specific to this log statement
1809     * @param message the message CharSequence to log.
1810     * @param throwable the {@code Throwable} to log, including its stack trace.
1811     */
1812    void info(Marker marker, CharSequence message, Throwable throwable);
1813
1814    /**
1815     * Logs a message object with the {@link Level#INFO INFO} level.
1816     *
1817     * @param marker the marker data specific to this log statement
1818     * @param message the message object to log.
1819     */
1820    void info(Marker marker, Object message);
1821
1822    /**
1823     * Logs a message at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1824     * <code>throwable</code> passed as parameter.
1825     *
1826     * @param marker the marker data specific to this log statement
1827     * @param message the message object to log.
1828     * @param throwable the {@code Throwable} to log, including its stack trace.
1829     */
1830    void info(Marker marker, Object message, Throwable throwable);
1831
1832    /**
1833     * Logs a message object with the {@link Level#INFO INFO} level.
1834     *
1835     * @param marker the marker data specific to this log statement
1836     * @param message the message object to log.
1837     */
1838    void info(Marker marker, String message);
1839
1840    /**
1841     * Logs a message with parameters at the {@link Level#INFO INFO} level.
1842     *
1843     * @param marker the marker data specific to this log statement
1844     * @param message the message to log; the format depends on the message factory.
1845     * @param params parameters to the message.
1846     * @see #getMessageFactory()
1847     */
1848    void info(Marker marker, String message, Object... params);
1849
1850    /**
1851     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#INFO
1852     * INFO} level.
1853     *
1854     * @param marker the marker data specific to this log statement
1855     * @param message the message to log; the format depends on the message factory.
1856     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
1857     * @since 2.4
1858     */
1859    void info(Marker marker, String message, Supplier<?>... paramSuppliers);
1860
1861    /**
1862     * Logs a message at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1863     * <code>throwable</code> passed as parameter.
1864     *
1865     * @param marker the marker data specific to this log statement
1866     * @param message the message object to log.
1867     * @param throwable the {@code Throwable} to log, including its stack trace.
1868     */
1869    void info(Marker marker, String message, Throwable throwable);
1870
1871    /**
1872     * Logs a message which is only to be constructed if the logging level is the {@link Level#INFO INFO} level with the
1873     * specified Marker.
1874     *
1875     * @param marker the marker data specific to this log statement
1876     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1877     *            message factory.
1878     * @since 2.4
1879     */
1880    void info(Marker marker, Supplier<?> messageSupplier);
1881
1882    /**
1883     * Logs a message (only to be constructed if the logging level is the {@link Level#INFO INFO} level) with the
1884     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
1885     *
1886     * @param marker the marker data specific to this log statement
1887     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
1888     *            message factory.
1889     * @param throwable A Throwable or null.
1890     * @since 2.4
1891     */
1892    void info(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
1893
1894    /**
1895     * Logs a message with the specific Marker at the {@link Level#INFO INFO} level.
1896     *
1897     * @param message the message string to be logged
1898     */
1899    void info(Message message);
1900
1901    /**
1902     * Logs a message with the specific Marker at the {@link Level#INFO INFO} level.
1903     *
1904     * @param message the message string to be logged
1905     * @param throwable A Throwable or null.
1906     */
1907    void info(Message message, Throwable throwable);
1908
1909    /**
1910     * Logs a message which is only to be constructed if the logging level is the {@link Level#INFO INFO} level. The
1911     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
1912     *
1913     * @param messageSupplier A function, which when called, produces the desired log message.
1914     * @since 2.4
1915     */
1916    void info(MessageSupplier messageSupplier);
1917
1918    /**
1919     * Logs a message (only to be constructed if the logging level is the {@link Level#INFO INFO} level) including the
1920     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
1921     * not use the {@link MessageFactory} to construct the {@code Message}.
1922     *
1923     * @param messageSupplier A function, which when called, produces the desired log message.
1924     * @param throwable the {@code Throwable} to log, including its stack trace.
1925     * @since 2.4
1926     */
1927    void info(MessageSupplier messageSupplier, Throwable throwable);
1928
1929    /**
1930     * Logs a message CharSequence with the {@link Level#INFO INFO} level.
1931     *
1932     * @param message the message CharSequence to log.
1933     */
1934    void info(CharSequence message);
1935
1936    /**
1937     * Logs a CharSequence at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1938     * <code>throwable</code> passed as parameter.
1939     *
1940     * @param message the message CharSequence to log.
1941     * @param throwable the {@code Throwable} to log, including its stack trace.
1942     */
1943    void info(CharSequence message, Throwable throwable);
1944
1945    /**
1946     * Logs a message object with the {@link Level#INFO INFO} level.
1947     *
1948     * @param message the message object to log.
1949     */
1950    void info(Object message);
1951
1952    /**
1953     * Logs a message at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1954     * <code>throwable</code> passed as parameter.
1955     *
1956     * @param message the message object to log.
1957     * @param throwable the {@code Throwable} to log, including its stack trace.
1958     */
1959    void info(Object message, Throwable throwable);
1960
1961    /**
1962     * Logs a message object with the {@link Level#INFO INFO} level.
1963     *
1964     * @param message the message string to log.
1965     */
1966    void info(String message);
1967
1968    /**
1969     * Logs a message with parameters at the {@link Level#INFO INFO} level.
1970     *
1971     * @param message the message to log; the format depends on the message factory.
1972     * @param params parameters to the message.
1973     * @see #getMessageFactory()
1974     */
1975    void info(String message, Object... params);
1976
1977    /**
1978     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#INFO
1979     * INFO} level.
1980     *
1981     * @param message the message to log; the format depends on the message factory.
1982     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
1983     * @since 2.4
1984     */
1985    void info(String message, Supplier<?>... paramSuppliers);
1986
1987    /**
1988     * Logs a message at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
1989     * <code>throwable</code> passed as parameter.
1990     *
1991     * @param message the message object to log.
1992     * @param throwable the {@code Throwable} to log, including its stack trace.
1993     */
1994    void info(String message, Throwable throwable);
1995
1996    /**
1997     * Logs a message which is only to be constructed if the logging level is the {@link Level#INFO INFO} level.
1998     *
1999     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2000     *            message factory.
2001     * @since 2.4
2002     */
2003    void info(Supplier<?> messageSupplier);
2004
2005    /**
2006     * Logs a message (only to be constructed if the logging level is the {@link Level#INFO INFO} level) including the
2007     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
2008     *
2009     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2010     *            message factory.
2011     * @param throwable the {@code Throwable} to log, including its stack trace.
2012     * @since 2.4
2013     */
2014    void info(Supplier<?> messageSupplier, Throwable throwable);
2015
2016    /**
2017     * Logs a message with parameters at info level.
2018     *
2019     * @param marker the marker data specific to this log statement
2020     * @param message the message to log; the format depends on the message factory.
2021     * @param p0 parameter to the message.
2022     */
2023    void info(Marker marker, String message, Object p0);
2024
2025    /**
2026     * Logs a message with parameters at info level.
2027     *
2028     * @param marker the marker data specific to this log statement
2029     * @param message the message to log; the format depends on the message factory.
2030     * @param p0 parameter to the message.
2031     * @param p1 parameter to the message.
2032     */
2033    void info(Marker marker, String message, Object p0, Object p1);
2034
2035    /**
2036     * Logs a message with parameters at info level.
2037     *
2038     * @param marker the marker data specific to this log statement
2039     * @param message the message to log; the format depends on the message factory.
2040     * @param p0 parameter to the message.
2041     * @param p1 parameter to the message.
2042     * @param p2 parameter to the message.
2043     */
2044    void info(Marker marker, String message, Object p0, Object p1, Object p2);
2045
2046    /**
2047     * Logs a message with parameters at info level.
2048     *
2049     * @param marker the marker data specific to this log statement
2050     * @param message the message to log; the format depends on the message factory.
2051     * @param p0 parameter to the message.
2052     * @param p1 parameter to the message.
2053     * @param p2 parameter to the message.
2054     * @param p3 parameter to the message.
2055     */
2056    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
2057
2058    /**
2059     * Logs a message with parameters at info level.
2060     *
2061     * @param marker the marker data specific to this log statement
2062     * @param message the message to log; the format depends on the message factory.
2063     * @param p0 parameter to the message.
2064     * @param p1 parameter to the message.
2065     * @param p2 parameter to the message.
2066     * @param p3 parameter to the message.
2067     * @param p4 parameter to the message.
2068     */
2069    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
2070
2071    /**
2072     * Logs a message with parameters at info level.
2073     *
2074     * @param marker the marker data specific to this log statement
2075     * @param message the message to log; the format depends on the message factory.
2076     * @param p0 parameter to the message.
2077     * @param p1 parameter to the message.
2078     * @param p2 parameter to the message.
2079     * @param p3 parameter to the message.
2080     * @param p4 parameter to the message.
2081     * @param p5 parameter to the message.
2082     */
2083    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
2084
2085    /**
2086     * Logs a message with parameters at info level.
2087     *
2088     * @param marker the marker data specific to this log statement
2089     * @param message the message to log; the format depends on the message factory.
2090     * @param p0 parameter to the message.
2091     * @param p1 parameter to the message.
2092     * @param p2 parameter to the message.
2093     * @param p3 parameter to the message.
2094     * @param p4 parameter to the message.
2095     * @param p5 parameter to the message.
2096     * @param p6 parameter to the message.
2097     */
2098    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
2099            Object p6);
2100
2101    /**
2102     * Logs a message with parameters at info level.
2103     *
2104     * @param marker the marker data specific to this log statement
2105     * @param message the message to log; the format depends on the message factory.
2106     * @param p0 parameter to the message.
2107     * @param p1 parameter to the message.
2108     * @param p2 parameter to the message.
2109     * @param p3 parameter to the message.
2110     * @param p4 parameter to the message.
2111     * @param p5 parameter to the message.
2112     * @param p6 parameter to the message.
2113     * @param p7 parameter to the message.
2114     */
2115    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2116            Object p7);
2117
2118    /**
2119     * Logs a message with parameters at info level.
2120     *
2121     * @param marker the marker data specific to this log statement
2122     * @param message the message to log; the format depends on the message factory.
2123     * @param p0 parameter to the message.
2124     * @param p1 parameter to the message.
2125     * @param p2 parameter to the message.
2126     * @param p3 parameter to the message.
2127     * @param p4 parameter to the message.
2128     * @param p5 parameter to the message.
2129     * @param p6 parameter to the message.
2130     * @param p7 parameter to the message.
2131     * @param p8 parameter to the message.
2132     */
2133    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2134            Object p7, Object p8);
2135
2136    /**
2137     * Logs a message with parameters at info level.
2138     *
2139     * @param marker the marker data specific to this log statement
2140     * @param message the message to log; the format depends on the message factory.
2141     * @param p0 parameter to the message.
2142     * @param p1 parameter to the message.
2143     * @param p2 parameter to the message.
2144     * @param p3 parameter to the message.
2145     * @param p4 parameter to the message.
2146     * @param p5 parameter to the message.
2147     * @param p6 parameter to the message.
2148     * @param p7 parameter to the message.
2149     * @param p8 parameter to the message.
2150     * @param p9 parameter to the message.
2151     */
2152    void info(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2153            Object p7, Object p8, Object p9);
2154
2155    /**
2156     * Logs a message with parameters at info level.
2157     *
2158     * @param message the message to log; the format depends on the message factory.
2159     * @param p0 parameter to the message.
2160     */
2161    void info(String message, Object p0);
2162
2163    /**
2164     * Logs a message with parameters at info level.
2165     *
2166     * @param message the message to log; the format depends on the message factory.
2167     * @param p0 parameter to the message.
2168     * @param p1 parameter to the message.
2169     */
2170    void info(String message, Object p0, Object p1);
2171
2172    /**
2173     * Logs a message with parameters at info level.
2174     *
2175     * @param message the message to log; the format depends on the message factory.
2176     * @param p0 parameter to the message.
2177     * @param p1 parameter to the message.
2178     * @param p2 parameter to the message.
2179     */
2180    void info(String message, Object p0, Object p1, Object p2);
2181
2182    /**
2183     * Logs a message with parameters at info level.
2184     *
2185     * @param message the message to log; the format depends on the message factory.
2186     * @param p0 parameter to the message.
2187     * @param p1 parameter to the message.
2188     * @param p2 parameter to the message.
2189     * @param p3 parameter to the message.
2190     */
2191    void info(String message, Object p0, Object p1, Object p2, Object p3);
2192
2193    /**
2194     * Logs a message with parameters at info level.
2195     *
2196     * @param message the message to log; the format depends on the message factory.
2197     * @param p0 parameter to the message.
2198     * @param p1 parameter to the message.
2199     * @param p2 parameter to the message.
2200     * @param p3 parameter to the message.
2201     * @param p4 parameter to the message.
2202     */
2203    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
2204
2205    /**
2206     * Logs a message with parameters at info level.
2207     *
2208     * @param message the message to log; the format depends on the message factory.
2209     * @param p0 parameter to the message.
2210     * @param p1 parameter to the message.
2211     * @param p2 parameter to the message.
2212     * @param p3 parameter to the message.
2213     * @param p4 parameter to the message.
2214     * @param p5 parameter to the message.
2215     */
2216    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
2217
2218    /**
2219     * Logs a message with parameters at info level.
2220     *
2221     * @param message the message to log; the format depends on the message factory.
2222     * @param p0 parameter to the message.
2223     * @param p1 parameter to the message.
2224     * @param p2 parameter to the message.
2225     * @param p3 parameter to the message.
2226     * @param p4 parameter to the message.
2227     * @param p5 parameter to the message.
2228     * @param p6 parameter to the message.
2229     */
2230    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
2231
2232    /**
2233     * Logs a message with parameters at info level.
2234     *
2235     * @param message the message to log; the format depends on the message factory.
2236     * @param p0 parameter to the message.
2237     * @param p1 parameter to the message.
2238     * @param p2 parameter to the message.
2239     * @param p3 parameter to the message.
2240     * @param p4 parameter to the message.
2241     * @param p5 parameter to the message.
2242     * @param p6 parameter to the message.
2243     * @param p7 parameter to the message.
2244     */
2245    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
2246
2247    /**
2248     * Logs a message with parameters at info level.
2249     *
2250     * @param message the message to log; the format depends on the message factory.
2251     * @param p0 parameter to the message.
2252     * @param p1 parameter to the message.
2253     * @param p2 parameter to the message.
2254     * @param p3 parameter to the message.
2255     * @param p4 parameter to the message.
2256     * @param p5 parameter to the message.
2257     * @param p6 parameter to the message.
2258     * @param p7 parameter to the message.
2259     * @param p8 parameter to the message.
2260     */
2261    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
2262            Object p8);
2263
2264    /**
2265     * Logs a message with parameters at info level.
2266     *
2267     * @param message the message to log; the format depends on the message factory.
2268     * @param p0 parameter to the message.
2269     * @param p1 parameter to the message.
2270     * @param p2 parameter to the message.
2271     * @param p3 parameter to the message.
2272     * @param p4 parameter to the message.
2273     * @param p5 parameter to the message.
2274     * @param p6 parameter to the message.
2275     * @param p7 parameter to the message.
2276     * @param p8 parameter to the message.
2277     * @param p9 parameter to the message.
2278     */
2279    void info(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
2280            Object p8, Object p9);
2281
2282    /**
2283     * Checks whether this Logger is enabled for the {@link Level#DEBUG DEBUG} Level.
2284     *
2285     * @return boolean - {@code true} if this Logger is enabled for level DEBUG, {@code false} otherwise.
2286     */
2287    boolean isDebugEnabled();
2288
2289    /**
2290     * Checks whether this Logger is enabled for the {@link Level#DEBUG DEBUG} Level.
2291     *
2292     * @param marker The Marker to check
2293     * @return boolean - {@code true} if this Logger is enabled for level DEBUG, {@code false} otherwise.
2294     */
2295    boolean isDebugEnabled(Marker marker);
2296
2297    /**
2298     * Checks whether this Logger is enabled for the given Level.
2299     * <p>
2300     * Note that passing in {@link Level#OFF OFF} always returns {@code true}.
2301     * </p>
2302     *
2303     * @param level the Level to check
2304     * @return boolean - {@code true} if this Logger is enabled for level, {@code false} otherwise.
2305     */
2306    boolean isEnabled(Level level);
2307
2308    /**
2309     * Checks whether this Logger is enabled for the given Level and Marker.
2310     *
2311     * @param level The Level to check
2312     * @param marker The Marker to check
2313     * @return boolean - {@code true} if this Logger is enabled for level and marker, {@code false} otherwise.
2314     */
2315    boolean isEnabled(Level level, Marker marker);
2316
2317    /**
2318     * Checks whether this Logger is enabled for the {@link Level#ERROR ERROR} Level.
2319     *
2320     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#ERROR ERROR}, {@code false}
2321     *         otherwise.
2322     */
2323    boolean isErrorEnabled();
2324
2325    /**
2326     * Checks whether this Logger is enabled for the {@link Level#ERROR ERROR} Level.
2327     *
2328     * @param marker The Marker to check
2329     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#ERROR ERROR}, {@code false}
2330     *         otherwise.
2331     */
2332    boolean isErrorEnabled(Marker marker);
2333
2334    /**
2335     * Checks whether this Logger is enabled for the {@link Level#FATAL FATAL} Level.
2336     *
2337     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#FATAL FATAL}, {@code false}
2338     *         otherwise.
2339     */
2340    boolean isFatalEnabled();
2341
2342    /**
2343     * Checks whether this Logger is enabled for the {@link Level#FATAL FATAL} Level.
2344     *
2345     * @param marker The Marker to check
2346     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#FATAL FATAL}, {@code false}
2347     *         otherwise.
2348     */
2349    boolean isFatalEnabled(Marker marker);
2350
2351    /**
2352     * Checks whether this Logger is enabled for the {@link Level#INFO INFO} Level.
2353     *
2354     * @return boolean - {@code true} if this Logger is enabled for level INFO, {@code false} otherwise.
2355     */
2356    boolean isInfoEnabled();
2357
2358    /**
2359     * Checks whether this Logger is enabled for the {@link Level#INFO INFO} Level.
2360     *
2361     * @param marker The Marker to check
2362     * @return boolean - {@code true} if this Logger is enabled for level INFO, {@code false} otherwise.
2363     */
2364    boolean isInfoEnabled(Marker marker);
2365
2366    /**
2367     * Checks whether this Logger is enabled for the {@link Level#TRACE TRACE} level.
2368     *
2369     * @return boolean - {@code true} if this Logger is enabled for level TRACE, {@code false} otherwise.
2370     */
2371    boolean isTraceEnabled();
2372
2373    /**
2374     * Checks whether this Logger is enabled for the {@link Level#TRACE TRACE} level.
2375     *
2376     * @param marker The Marker to check
2377     * @return boolean - {@code true} if this Logger is enabled for level TRACE, {@code false} otherwise.
2378     */
2379    boolean isTraceEnabled(Marker marker);
2380
2381    /**
2382     * Checks whether this Logger is enabled for the {@link Level#WARN WARN} Level.
2383     *
2384     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#WARN WARN}, {@code false}
2385     *         otherwise.
2386     */
2387    boolean isWarnEnabled();
2388
2389    /**
2390     * Checks whether this Logger is enabled for the {@link Level#WARN WARN} Level.
2391     *
2392     * @param marker The Marker to check
2393     * @return boolean - {@code true} if this Logger is enabled for level {@link Level#WARN WARN}, {@code false}
2394     *         otherwise.
2395     */
2396    boolean isWarnEnabled(Marker marker);
2397
2398    /**
2399     * Logs a message with the specific Marker at the given level.
2400     *
2401     * @param level the logging level
2402     * @param marker the marker data specific to this log statement
2403     * @param message the message string to be logged
2404     */
2405    void log(Level level, Marker marker, Message message);
2406
2407    /**
2408     * Logs a message with the specific Marker at the given level.
2409     *
2410     * @param level the logging level
2411     * @param marker the marker data specific to this log statement
2412     * @param message the message string to be logged
2413     * @param throwable A Throwable or null.
2414     */
2415    void log(Level level, Marker marker, Message message, Throwable throwable);
2416
2417    /**
2418     * Logs a message which is only to be constructed if the logging level is the specified level with the specified
2419     * Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
2420     * {@code Message}.
2421     *
2422     * @param level the logging level
2423     * @param marker the marker data specific to this log statement
2424     * @param messageSupplier A function, which when called, produces the desired log message.
2425     * @since 2.4
2426     */
2427    void log(Level level, Marker marker, MessageSupplier messageSupplier);
2428
2429    /**
2430     * Logs a message (only to be constructed if the logging level is the specified level) with the specified Marker and
2431     * including the stack log of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier}
2432     * may or may not use the {@link MessageFactory} to construct the {@code Message}.
2433     *
2434     * @param level the logging level
2435     * @param marker the marker data specific to this log statement
2436     * @param messageSupplier A function, which when called, produces the desired log message.
2437     * @param throwable A Throwable or null.
2438     * @since 2.4
2439     */
2440    void log(Level level, Marker marker, MessageSupplier messageSupplier, Throwable throwable);
2441
2442    /**
2443     * Logs a message CharSequence with the given level.
2444     *
2445     * @param level the logging level
2446     * @param marker the marker data specific to this log statement
2447     * @param message the message CharSequence to log.
2448     */
2449    void log(Level level, Marker marker, CharSequence message);
2450
2451    /**
2452     * Logs a CharSequence at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2453     * parameter.
2454     *
2455     * @param level the logging level
2456     * @param marker the marker data specific to this log statement
2457     * @param message the message CharSequence to log.
2458     * @param throwable the {@code Throwable} to log, including its stack trace.
2459     */
2460    void log(Level level, Marker marker, CharSequence message, Throwable throwable);
2461
2462    /**
2463     * Logs a message object with the given level.
2464     *
2465     * @param level the logging level
2466     * @param marker the marker data specific to this log statement
2467     * @param message the message object to log.
2468     */
2469    void log(Level level, Marker marker, Object message);
2470
2471    /**
2472     * Logs a message at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2473     * parameter.
2474     *
2475     * @param level the logging level
2476     * @param marker the marker data specific to this log statement
2477     * @param message the message to log.
2478     * @param throwable the {@code Throwable} to log, including its stack trace.
2479     */
2480    void log(Level level, Marker marker, Object message, Throwable throwable);
2481
2482    /**
2483     * Logs a message object with the given level.
2484     *
2485     * @param level the logging level
2486     * @param marker the marker data specific to this log statement
2487     * @param message the message object to log.
2488     */
2489    void log(Level level, Marker marker, String message);
2490
2491    /**
2492     * Logs a message with parameters at the given level.
2493     *
2494     * @param level the logging level
2495     * @param marker the marker data specific to this log statement
2496     * @param message the message to log; the format depends on the message factory.
2497     * @param params parameters to the message.
2498     * @see #getMessageFactory()
2499     */
2500    void log(Level level, Marker marker, String message, Object... params);
2501
2502    /**
2503     * Logs a message with parameters which are only to be constructed if the logging level is the specified level.
2504     *
2505     * @param level the logging level
2506     * @param marker the marker data specific to this log statement
2507     * @param message the message to log; the format depends on the message factory.
2508     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
2509     * @since 2.4
2510     */
2511    void log(Level level, Marker marker, String message, Supplier<?>... paramSuppliers);
2512
2513    /**
2514     * Logs a message at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2515     * parameter.
2516     *
2517     * @param level the logging level
2518     * @param marker the marker data specific to this log statement
2519     * @param message the message to log.
2520     * @param throwable the {@code Throwable} to log, including its stack trace.
2521     */
2522    void log(Level level, Marker marker, String message, Throwable throwable);
2523
2524    /**
2525     * Logs a message (only to be constructed if the logging level is the specified level) with the specified Marker.
2526     *
2527     * @param level the logging level
2528     * @param marker the marker data specific to this log statement
2529     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2530     *            message factory.
2531     * @since 2.4
2532     */
2533    void log(Level level, Marker marker, Supplier<?> messageSupplier);
2534
2535    /**
2536     * Logs a message (only to be constructed if the logging level is the specified level) with the specified Marker and
2537     * including the stack log of the {@link Throwable} <code>throwable</code> passed as parameter.
2538     *
2539     * @param level the logging level
2540     * @param marker the marker data specific to this log statement
2541     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2542     *            message factory.
2543     * @param throwable A Throwable or null.
2544     * @since 2.4
2545     */
2546    void log(Level level, Marker marker, Supplier<?> messageSupplier, Throwable throwable);
2547
2548    /**
2549     * Logs a message with the specific Marker at the given level.
2550     *
2551     * @param level the logging level
2552     * @param message the message string to be logged
2553     */
2554    void log(Level level, Message message);
2555
2556    /**
2557     * Logs a message with the specific Marker at the given level.
2558     *
2559     * @param level the logging level
2560     * @param message the message string to be logged
2561     * @param throwable A Throwable or null.
2562     */
2563    void log(Level level, Message message, Throwable throwable);
2564
2565    /**
2566     * Logs a message which is only to be constructed if the logging level is the specified level. The
2567     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
2568     *
2569     * @param level the logging level
2570     * @param messageSupplier A function, which when called, produces the desired log message.
2571     * @since 2.4
2572     */
2573    void log(Level level, MessageSupplier messageSupplier);
2574
2575    /**
2576     * Logs a message (only to be constructed if the logging level is the specified level) including the stack log of
2577     * the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may not use the
2578     * {@link MessageFactory} to construct the {@code Message}.
2579     *
2580     * @param level the logging level
2581     * @param messageSupplier A function, which when called, produces the desired log message.
2582     * @param throwable the {@code Throwable} to log, including its stack log.
2583     * @since 2.4
2584     */
2585    void log(Level level, MessageSupplier messageSupplier, Throwable throwable);
2586
2587    /**
2588     * Logs a message CharSequence with the given level.
2589     *
2590     * @param level the logging level
2591     * @param message the message CharSequence to log.
2592     */
2593    void log(Level level, CharSequence message);
2594
2595    /**
2596     * Logs a CharSequence at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2597     * parameter.
2598     *
2599     * @param level the logging level
2600     * @param message the message CharSequence to log.
2601     * @param throwable the {@code Throwable} to log, including its stack trace.
2602     */
2603    void log(Level level, CharSequence message, Throwable throwable);
2604
2605    /**
2606     * Logs a message object with the given level.
2607     *
2608     * @param level the logging level
2609     * @param message the message object to log.
2610     */
2611    void log(Level level, Object message);
2612
2613    /**
2614     * Logs a message at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2615     * parameter.
2616     *
2617     * @param level the logging level
2618     * @param message the message to log.
2619     * @param throwable the {@code Throwable} to log, including its stack trace.
2620     */
2621    void log(Level level, Object message, Throwable throwable);
2622
2623    /**
2624     * Logs a message object with the given level.
2625     *
2626     * @param level the logging level
2627     * @param message the message string to log.
2628     */
2629    void log(Level level, String message);
2630
2631    /**
2632     * Logs a message with parameters at the given level.
2633     *
2634     * @param level the logging level
2635     * @param message the message to log; the format depends on the message factory.
2636     * @param params parameters to the message.
2637     * @see #getMessageFactory()
2638     */
2639    void log(Level level, String message, Object... params);
2640
2641    /**
2642     * Logs a message with parameters which are only to be constructed if the logging level is the specified level.
2643     *
2644     * @param level the logging level
2645     * @param message the message to log; the format depends on the message factory.
2646     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
2647     * @since 2.4
2648     */
2649    void log(Level level, String message, Supplier<?>... paramSuppliers);
2650
2651    /**
2652     * Logs a message at the given level including the stack trace of the {@link Throwable} <code>throwable</code> passed as
2653     * parameter.
2654     *
2655     * @param level the logging level
2656     * @param message the message to log.
2657     * @param throwable the {@code Throwable} to log, including its stack trace.
2658     */
2659    void log(Level level, String message, Throwable throwable);
2660
2661    /**
2662     * Logs a message which is only to be constructed if the logging level is the specified level.
2663     *
2664     * @param level the logging level
2665     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2666     *            message factory.
2667     * @since 2.4
2668     */
2669    void log(Level level, Supplier<?> messageSupplier);
2670
2671    /**
2672     * Logs a message (only to be constructed if the logging level is the specified level) including the stack log of
2673     * the {@link Throwable} <code>throwable</code> passed as parameter.
2674     *
2675     * @param level the logging level
2676     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
2677     *            message factory.
2678     * @param throwable the {@code Throwable} to log, including its stack log.
2679     * @since 2.4
2680     */
2681    void log(Level level, Supplier<?> messageSupplier, Throwable throwable);
2682
2683    /**
2684     * Logs a message with parameters at the specified level.
2685     *
2686     * @param level the logging level
2687     * @param marker the marker data specific to this log statement
2688     * @param message the message to log; the format depends on the message factory.
2689     * @param p0 parameter to the message.
2690     */
2691    void log(Level level, Marker marker, String message, Object p0);
2692
2693    /**
2694     * Logs a message with parameters at the specified level.
2695     *
2696     * @param level the logging level
2697     * @param marker the marker data specific to this log statement
2698     * @param message the message to log; the format depends on the message factory.
2699     * @param p0 parameter to the message.
2700     * @param p1 parameter to the message.
2701     */
2702    void log(Level level, Marker marker, String message, Object p0, Object p1);
2703
2704    /**
2705     * Logs a message with parameters at the specified level.
2706     *
2707     * @param level the logging level
2708     * @param marker the marker data specific to this log statement
2709     * @param message the message to log; the format depends on the message factory.
2710     * @param p0 parameter to the message.
2711     * @param p1 parameter to the message.
2712     * @param p2 parameter to the message.
2713     */
2714    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2);
2715
2716    /**
2717     * Logs a message with parameters at the specified level.
2718     *
2719     * @param level the logging level
2720     * @param marker the marker data specific to this log statement
2721     * @param message the message to log; the format depends on the message factory.
2722     * @param p0 parameter to the message.
2723     * @param p1 parameter to the message.
2724     * @param p2 parameter to the message.
2725     * @param p3 parameter to the message.
2726     */
2727    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
2728
2729    /**
2730     * Logs a message with parameters at the specified level.
2731     *
2732     * @param level the logging level
2733     * @param marker the marker data specific to this log statement
2734     * @param message the message to log; the format depends on the message factory.
2735     * @param p0 parameter to the message.
2736     * @param p1 parameter to the message.
2737     * @param p2 parameter to the message.
2738     * @param p3 parameter to the message.
2739     * @param p4 parameter to the message.
2740     */
2741    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
2742
2743    /**
2744     * Logs a message with parameters at the specified level.
2745     *
2746     * @param level the logging level
2747     * @param marker the marker data specific to this log statement
2748     * @param message the message to log; the format depends on the message factory.
2749     * @param p0 parameter to the message.
2750     * @param p1 parameter to the message.
2751     * @param p2 parameter to the message.
2752     * @param p3 parameter to the message.
2753     * @param p4 parameter to the message.
2754     * @param p5 parameter to the message.
2755     */
2756    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
2757
2758    /**
2759     * Logs a message with parameters at the specified level.
2760     *
2761     * @param level the logging level
2762     * @param marker the marker data specific to this log statement
2763     * @param message the message to log; the format depends on the message factory.
2764     * @param p0 parameter to the message.
2765     * @param p1 parameter to the message.
2766     * @param p2 parameter to the message.
2767     * @param p3 parameter to the message.
2768     * @param p4 parameter to the message.
2769     * @param p5 parameter to the message.
2770     * @param p6 parameter to the message.
2771     */
2772    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
2773            Object p6);
2774
2775    /**
2776     * Logs a message with parameters at the specified level.
2777     *
2778     * @param level the logging level
2779     * @param marker the marker data specific to this log statement
2780     * @param message the message to log; the format depends on the message factory.
2781     * @param p0 parameter to the message.
2782     * @param p1 parameter to the message.
2783     * @param p2 parameter to the message.
2784     * @param p3 parameter to the message.
2785     * @param p4 parameter to the message.
2786     * @param p5 parameter to the message.
2787     * @param p6 parameter to the message.
2788     * @param p7 parameter to the message.
2789     */
2790    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2791            Object p7);
2792
2793    /**
2794     * Logs a message with parameters at the specified level.
2795     *
2796     * @param level the logging level
2797     * @param marker the marker data specific to this log statement
2798     * @param message the message to log; the format depends on the message factory.
2799     * @param p0 parameter to the message.
2800     * @param p1 parameter to the message.
2801     * @param p2 parameter to the message.
2802     * @param p3 parameter to the message.
2803     * @param p4 parameter to the message.
2804     * @param p5 parameter to the message.
2805     * @param p6 parameter to the message.
2806     * @param p7 parameter to the message.
2807     * @param p8 parameter to the message.
2808     */
2809    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2810            Object p7, Object p8);
2811
2812    /**
2813     * Logs a message with parameters at the specified level.
2814     *
2815     * @param level the logging level
2816     * @param marker the marker data specific to this log statement
2817     * @param message the message to log; the format depends on the message factory.
2818     * @param p0 parameter to the message.
2819     * @param p1 parameter to the message.
2820     * @param p2 parameter to the message.
2821     * @param p3 parameter to the message.
2822     * @param p4 parameter to the message.
2823     * @param p5 parameter to the message.
2824     * @param p6 parameter to the message.
2825     * @param p7 parameter to the message.
2826     * @param p8 parameter to the message.
2827     * @param p9 parameter to the message.
2828     */
2829    void log(Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
2830            Object p7, Object p8, Object p9);
2831
2832    /**
2833     * Logs a message with parameters at the specified level.
2834     *
2835     * @param level the logging level
2836     * @param message the message to log; the format depends on the message factory.
2837     * @param p0 parameter to the message.
2838     */
2839    void log(Level level, String message, Object p0);
2840
2841    /**
2842     * Logs a message with parameters at the specified level.
2843     *
2844     * @param level the logging level
2845     * @param message the message to log; the format depends on the message factory.
2846     * @param p0 parameter to the message.
2847     * @param p1 parameter to the message.
2848     */
2849    void log(Level level, String message, Object p0, Object p1);
2850
2851    /**
2852     * Logs a message with parameters at the specified level.
2853     *
2854     * @param level the logging level
2855     * @param message the message to log; the format depends on the message factory.
2856     * @param p0 parameter to the message.
2857     * @param p1 parameter to the message.
2858     * @param p2 parameter to the message.
2859     */
2860    void log(Level level, String message, Object p0, Object p1, Object p2);
2861
2862    /**
2863     * Logs a message with parameters at the specified level.
2864     *
2865     * @param level the logging level
2866     * @param message the message to log; the format depends on the message factory.
2867     * @param p0 parameter to the message.
2868     * @param p1 parameter to the message.
2869     * @param p2 parameter to the message.
2870     * @param p3 parameter to the message.
2871     */
2872    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3);
2873
2874    /**
2875     * Logs a message with parameters at the specified level.
2876     *
2877     * @param level the logging level
2878     * @param message the message to log; the format depends on the message factory.
2879     * @param p0 parameter to the message.
2880     * @param p1 parameter to the message.
2881     * @param p2 parameter to the message.
2882     * @param p3 parameter to the message.
2883     * @param p4 parameter to the message.
2884     */
2885    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
2886
2887    /**
2888     * Logs a message with parameters at the specified level.
2889     *
2890     * @param level the logging level
2891     * @param message the message to log; the format depends on the message factory.
2892     * @param p0 parameter to the message.
2893     * @param p1 parameter to the message.
2894     * @param p2 parameter to the message.
2895     * @param p3 parameter to the message.
2896     * @param p4 parameter to the message.
2897     * @param p5 parameter to the message.
2898     */
2899    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
2900
2901    /**
2902     * Logs a message with parameters at the specified level.
2903     *
2904     * @param level the logging level
2905     * @param message the message to log; the format depends on the message factory.
2906     * @param p0 parameter to the message.
2907     * @param p1 parameter to the message.
2908     * @param p2 parameter to the message.
2909     * @param p3 parameter to the message.
2910     * @param p4 parameter to the message.
2911     * @param p5 parameter to the message.
2912     * @param p6 parameter to the message.
2913     */
2914    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
2915
2916    /**
2917     * Logs a message with parameters at the specified level.
2918     *
2919     * @param level the logging level
2920     * @param message the message to log; the format depends on the message factory.
2921     * @param p0 parameter to the message.
2922     * @param p1 parameter to the message.
2923     * @param p2 parameter to the message.
2924     * @param p3 parameter to the message.
2925     * @param p4 parameter to the message.
2926     * @param p5 parameter to the message.
2927     * @param p6 parameter to the message.
2928     * @param p7 parameter to the message.
2929     */
2930    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
2931
2932    /**
2933     * Logs a message with parameters at the specified level.
2934     *
2935     * @param level the logging level
2936     * @param message the message to log; the format depends on the message factory.
2937     * @param p0 parameter to the message.
2938     * @param p1 parameter to the message.
2939     * @param p2 parameter to the message.
2940     * @param p3 parameter to the message.
2941     * @param p4 parameter to the message.
2942     * @param p5 parameter to the message.
2943     * @param p6 parameter to the message.
2944     * @param p7 parameter to the message.
2945     * @param p8 parameter to the message.
2946     */
2947    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
2948            Object p8);
2949
2950    /**
2951     * Logs a message with parameters at the specified level.
2952     *
2953     * @param level the logging level
2954     * @param message the message to log; the format depends on the message factory.
2955     * @param p0 parameter to the message.
2956     * @param p1 parameter to the message.
2957     * @param p2 parameter to the message.
2958     * @param p3 parameter to the message.
2959     * @param p4 parameter to the message.
2960     * @param p5 parameter to the message.
2961     * @param p6 parameter to the message.
2962     * @param p7 parameter to the message.
2963     * @param p8 parameter to the message.
2964     * @param p9 parameter to the message.
2965     */
2966    void log(Level level, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
2967            Object p8, Object p9);
2968
2969    /**
2970     * Logs a formatted message using the specified format string and arguments.
2971     *
2972     * @param level The logging Level.
2973     * @param marker the marker data specific to this log statement.
2974     * @param format The format String.
2975     * @param params Arguments specified by the format.
2976     */
2977    void printf(Level level, Marker marker, String format, Object... params);
2978
2979    /**
2980     * Logs a formatted message using the specified format string and arguments.
2981     *
2982     * @param level The logging Level.
2983     * @param format The format String.
2984     * @param params Arguments specified by the format.
2985     */
2986    void printf(Level level, String format, Object... params);
2987
2988    /**
2989     * Logs a {@link Throwable} to be thrown. This may be coded as:
2990     *
2991     * <pre>
2992     * throw logger.throwing(Level.DEBUG, myException);
2993     * </pre>
2994     *
2995     * @param <T> the Throwable type.
2996     * @param level The logging Level.
2997     * @param throwable The Throwable.
2998     * @return the Throwable.
2999     */
3000    <T extends Throwable> T throwing(Level level, T throwable);
3001
3002    /**
3003     * Logs a {@link Throwable} to be thrown at the {@link Level#ERROR ERROR} level.
3004     * This may be coded as:
3005     *
3006     * <pre>
3007     * throw logger.throwing(myException);
3008     * </pre>
3009     *
3010     * @param <T> the Throwable type.
3011     * @param throwable The Throwable.
3012     * @return the Throwable.
3013     */
3014    <T extends Throwable> T throwing(T throwable);
3015
3016    /**
3017     * Logs a message with the specific Marker at the {@link Level#TRACE TRACE} level.
3018     *
3019     * @param marker the marker data specific to this log statement
3020     * @param message the message string to be logged
3021     */
3022    void trace(Marker marker, Message message);
3023
3024    /**
3025     * Logs a message with the specific Marker at the {@link Level#TRACE TRACE} level.
3026     *
3027     * @param marker the marker data specific to this log statement
3028     * @param message the message string to be logged
3029     * @param throwable A Throwable or null.
3030     */
3031    void trace(Marker marker, Message message, Throwable throwable);
3032
3033    /**
3034     * Logs a message which is only to be constructed if the logging level is the {@link Level#TRACE TRACE} level with
3035     * the specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
3036     * {@code Message}.
3037     *
3038     * @param marker the marker data specific to this log statement
3039     * @param messageSupplier A function, which when called, produces the desired log message.
3040     * @since 2.4
3041     */
3042    void trace(Marker marker, MessageSupplier messageSupplier);
3043
3044    /**
3045     * Logs a message (only to be constructed if the logging level is the {@link Level#TRACE TRACE} level) with the
3046     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The
3047     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
3048     *
3049     * @param marker the marker data specific to this log statement
3050     * @param messageSupplier A function, which when called, produces the desired log message.
3051     * @param throwable A Throwable or null.
3052     * @since 2.4
3053     */
3054    void trace(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
3055
3056    /**
3057     * Logs a message CharSequence with the {@link Level#TRACE TRACE} level.
3058     *
3059     * @param marker the marker data specific to this log statement
3060     * @param message the message CharSequence to log.
3061     */
3062    void trace(Marker marker, CharSequence message);
3063
3064    /**
3065     * Logs a CharSequence at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3066     * <code>throwable</code> passed as parameter.
3067     *
3068     * @param marker the marker data specific to this log statement
3069     * @param message the message CharSequence to log.
3070     * @param throwable the {@code Throwable} to log, including its stack trace.
3071     * @see #debug(String)
3072     */
3073    void trace(Marker marker, CharSequence message, Throwable throwable);
3074
3075    /**
3076     * Logs a message object with the {@link Level#TRACE TRACE} level.
3077     *
3078     * @param marker the marker data specific to this log statement
3079     * @param message the message object to log.
3080     */
3081    void trace(Marker marker, Object message);
3082
3083    /**
3084     * Logs a message at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3085     * <code>throwable</code> passed as parameter.
3086     *
3087     * @param marker the marker data specific to this log statement
3088     * @param message the message object to log.
3089     * @param throwable the {@code Throwable} to log, including its stack trace.
3090     * @see #debug(String)
3091     */
3092    void trace(Marker marker, Object message, Throwable throwable);
3093
3094    /**
3095     * Logs a message object with the {@link Level#TRACE TRACE} level.
3096     *
3097     * @param marker the marker data specific to this log statement
3098     * @param message the message string to log.
3099     */
3100    void trace(Marker marker, String message);
3101
3102    /**
3103     * Logs a message with parameters at the {@link Level#TRACE TRACE} level.
3104     *
3105     * @param marker the marker data specific to this log statement
3106     * @param message the message to log; the format depends on the message factory.
3107     * @param params parameters to the message.
3108     * @see #getMessageFactory()
3109     */
3110    void trace(Marker marker, String message, Object... params);
3111
3112    /**
3113     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#TRACE
3114     * TRACE} level.
3115     *
3116     * @param marker the marker data specific to this log statement
3117     * @param message the message to log; the format depends on the message factory.
3118     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
3119     * @since 2.4
3120     */
3121    void trace(Marker marker, String message, Supplier<?>... paramSuppliers);
3122
3123    /**
3124     * Logs a message at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3125     * <code>throwable</code> passed as parameter.
3126     *
3127     * @param marker the marker data specific to this log statement
3128     * @param message the message object to log.
3129     * @param throwable the {@code Throwable} to log, including its stack trace.
3130     * @see #debug(String)
3131     */
3132    void trace(Marker marker, String message, Throwable throwable);
3133
3134    /**
3135     * Logs a message which is only to be constructed if the logging level is the {@link Level#TRACE TRACE} level with
3136     * the specified Marker.
3137     *
3138     * @param marker the marker data specific to this log statement
3139     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3140     *            message factory.
3141     * @since 2.4
3142     */
3143    void trace(Marker marker, Supplier<?> messageSupplier);
3144
3145    /**
3146     * Logs a message (only to be constructed if the logging level is the {@link Level#TRACE TRACE} level) with the
3147     * specified Marker and including the stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
3148     *
3149     * @param marker the marker data specific to this log statement
3150     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3151     *            message factory.
3152     * @param throwable A Throwable or null.
3153     * @since 2.4
3154     */
3155    void trace(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
3156
3157    /**
3158     * Logs a message with the specific Marker at the {@link Level#TRACE TRACE} level.
3159     *
3160     * @param message the message string to be logged
3161     */
3162    void trace(Message message);
3163
3164    /**
3165     * Logs a message with the specific Marker at the {@link Level#TRACE TRACE} level.
3166     *
3167     * @param message the message string to be logged
3168     * @param throwable A Throwable or null.
3169     */
3170    void trace(Message message, Throwable throwable);
3171
3172    /**
3173     * Logs a message which is only to be constructed if the logging level is the {@link Level#TRACE TRACE} level. The
3174     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
3175     *
3176     * @param messageSupplier A function, which when called, produces the desired log message.
3177     * @since 2.4
3178     */
3179    void trace(MessageSupplier messageSupplier);
3180
3181    /**
3182     * Logs a message (only to be constructed if the logging level is the {@link Level#TRACE TRACE} level) including the
3183     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
3184     * not use the {@link MessageFactory} to construct the {@code Message}.
3185     *
3186     * @param messageSupplier A function, which when called, produces the desired log message.
3187     * @param throwable the {@code Throwable} to log, including its stack trace.
3188     * @since 2.4
3189     */
3190    void trace(MessageSupplier messageSupplier, Throwable throwable);
3191
3192    /**
3193     * Logs a message CharSequence with the {@link Level#TRACE TRACE} level.
3194     *
3195     * @param message the message CharSequence to log.
3196     */
3197    void trace(CharSequence message);
3198
3199    /**
3200     * Logs a CharSequence at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3201     * <code>throwable</code> passed as parameter.
3202     *
3203     * @param message the message CharSequence to log.
3204     * @param throwable the {@code Throwable} to log, including its stack trace.
3205     * @see #debug(String)
3206     */
3207    void trace(CharSequence message, Throwable throwable);
3208
3209    /**
3210     * Logs a message object with the {@link Level#TRACE TRACE} level.
3211     *
3212     * @param message the message object to log.
3213     */
3214    void trace(Object message);
3215
3216    /**
3217     * Logs a message at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3218     * <code>throwable</code> passed as parameter.
3219     *
3220     * @param message the message object to log.
3221     * @param throwable the {@code Throwable} to log, including its stack trace.
3222     * @see #debug(String)
3223     */
3224    void trace(Object message, Throwable throwable);
3225
3226    /**
3227     * Logs a message object with the {@link Level#TRACE TRACE} level.
3228     *
3229     * @param message the message string to log.
3230     */
3231    void trace(String message);
3232
3233    /**
3234     * Logs a message with parameters at the {@link Level#TRACE TRACE} level.
3235     *
3236     * @param message the message to log; the format depends on the message factory.
3237     * @param params parameters to the message.
3238     * @see #getMessageFactory()
3239     */
3240    void trace(String message, Object... params);
3241
3242    /**
3243     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#TRACE
3244     * TRACE} level.
3245     *
3246     * @param message the message to log; the format depends on the message factory.
3247     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
3248     * @since 2.4
3249     */
3250    void trace(String message, Supplier<?>... paramSuppliers);
3251
3252    /**
3253     * Logs a message at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
3254     * <code>throwable</code> passed as parameter.
3255     *
3256     * @param message the message object to log.
3257     * @param throwable the {@code Throwable} to log, including its stack trace.
3258     * @see #debug(String)
3259     */
3260    void trace(String message, Throwable throwable);
3261
3262    /**
3263     * Logs a message which is only to be constructed if the logging level is the {@link Level#TRACE TRACE} level.
3264     *
3265     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3266     *            message factory.
3267     * @since 2.4
3268     */
3269    void trace(Supplier<?> messageSupplier);
3270
3271    /**
3272     * Logs a message (only to be constructed if the logging level is the {@link Level#TRACE TRACE} level) including the
3273     * stack trace of the {@link Throwable} <code>throwable</code> passed as parameter.
3274     *
3275     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3276     *            message factory.
3277     * @param throwable the {@code Throwable} to log, including its stack trace.
3278     * @since 2.4
3279     */
3280    void trace(Supplier<?> messageSupplier, Throwable throwable);
3281
3282    /**
3283     * Logs a message with parameters at trace level.
3284     *
3285     * @param marker the marker data specific to this log statement
3286     * @param message the message to log; the format depends on the message factory.
3287     * @param p0 parameter to the message.
3288     */
3289    void trace(Marker marker, String message, Object p0);
3290
3291    /**
3292     * Logs a message with parameters at trace level.
3293     *
3294     * @param marker the marker data specific to this log statement
3295     * @param message the message to log; the format depends on the message factory.
3296     * @param p0 parameter to the message.
3297     * @param p1 parameter to the message.
3298     */
3299    void trace(Marker marker, String message, Object p0, Object p1);
3300
3301    /**
3302     * Logs a message with parameters at trace level.
3303     *
3304     * @param marker the marker data specific to this log statement
3305     * @param message the message to log; the format depends on the message factory.
3306     * @param p0 parameter to the message.
3307     * @param p1 parameter to the message.
3308     * @param p2 parameter to the message.
3309     */
3310    void trace(Marker marker, String message, Object p0, Object p1, Object p2);
3311
3312    /**
3313     * Logs a message with parameters at trace level.
3314     *
3315     * @param marker the marker data specific to this log statement
3316     * @param message the message to log; the format depends on the message factory.
3317     * @param p0 parameter to the message.
3318     * @param p1 parameter to the message.
3319     * @param p2 parameter to the message.
3320     * @param p3 parameter to the message.
3321     */
3322    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
3323
3324    /**
3325     * Logs a message with parameters at trace level.
3326     *
3327     * @param marker the marker data specific to this log statement
3328     * @param message the message to log; the format depends on the message factory.
3329     * @param p0 parameter to the message.
3330     * @param p1 parameter to the message.
3331     * @param p2 parameter to the message.
3332     * @param p3 parameter to the message.
3333     * @param p4 parameter to the message.
3334     */
3335    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
3336
3337    /**
3338     * Logs a message with parameters at trace level.
3339     *
3340     * @param marker the marker data specific to this log statement
3341     * @param message the message to log; the format depends on the message factory.
3342     * @param p0 parameter to the message.
3343     * @param p1 parameter to the message.
3344     * @param p2 parameter to the message.
3345     * @param p3 parameter to the message.
3346     * @param p4 parameter to the message.
3347     * @param p5 parameter to the message.
3348     */
3349    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
3350
3351    /**
3352     * Logs a message with parameters at trace level.
3353     *
3354     * @param marker the marker data specific to this log statement
3355     * @param message the message to log; the format depends on the message factory.
3356     * @param p0 parameter to the message.
3357     * @param p1 parameter to the message.
3358     * @param p2 parameter to the message.
3359     * @param p3 parameter to the message.
3360     * @param p4 parameter to the message.
3361     * @param p5 parameter to the message.
3362     * @param p6 parameter to the message.
3363     */
3364    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
3365            Object p6);
3366
3367    /**
3368     * Logs a message with parameters at trace level.
3369     *
3370     * @param marker the marker data specific to this log statement
3371     * @param message the message to log; the format depends on the message factory.
3372     * @param p0 parameter to the message.
3373     * @param p1 parameter to the message.
3374     * @param p2 parameter to the message.
3375     * @param p3 parameter to the message.
3376     * @param p4 parameter to the message.
3377     * @param p5 parameter to the message.
3378     * @param p6 parameter to the message.
3379     * @param p7 parameter to the message.
3380     */
3381    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
3382            Object p7);
3383
3384    /**
3385     * Logs a message with parameters at trace level.
3386     *
3387     * @param marker the marker data specific to this log statement
3388     * @param message the message to log; the format depends on the message factory.
3389     * @param p0 parameter to the message.
3390     * @param p1 parameter to the message.
3391     * @param p2 parameter to the message.
3392     * @param p3 parameter to the message.
3393     * @param p4 parameter to the message.
3394     * @param p5 parameter to the message.
3395     * @param p6 parameter to the message.
3396     * @param p7 parameter to the message.
3397     * @param p8 parameter to the message.
3398     */
3399    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
3400            Object p7, Object p8);
3401
3402    /**
3403     * Logs a message with parameters at trace level.
3404     *
3405     * @param marker the marker data specific to this log statement
3406     * @param message the message to log; the format depends on the message factory.
3407     * @param p0 parameter to the message.
3408     * @param p1 parameter to the message.
3409     * @param p2 parameter to the message.
3410     * @param p3 parameter to the message.
3411     * @param p4 parameter to the message.
3412     * @param p5 parameter to the message.
3413     * @param p6 parameter to the message.
3414     * @param p7 parameter to the message.
3415     * @param p8 parameter to the message.
3416     * @param p9 parameter to the message.
3417     */
3418    void trace(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
3419            Object p7, Object p8, Object p9);
3420
3421    /**
3422     * Logs a message with parameters at trace level.
3423     *
3424     * @param message the message to log; the format depends on the message factory.
3425     * @param p0 parameter to the message.
3426     */
3427    void trace(String message, Object p0);
3428
3429    /**
3430     * Logs a message with parameters at trace level.
3431     *
3432     * @param message the message to log; the format depends on the message factory.
3433     * @param p0 parameter to the message.
3434     * @param p1 parameter to the message.
3435     */
3436    void trace(String message, Object p0, Object p1);
3437
3438    /**
3439     * Logs a message with parameters at trace level.
3440     *
3441     * @param message the message to log; the format depends on the message factory.
3442     * @param p0 parameter to the message.
3443     * @param p1 parameter to the message.
3444     * @param p2 parameter to the message.
3445     */
3446    void trace(String message, Object p0, Object p1, Object p2);
3447
3448    /**
3449     * Logs a message with parameters at trace level.
3450     *
3451     * @param message the message to log; the format depends on the message factory.
3452     * @param p0 parameter to the message.
3453     * @param p1 parameter to the message.
3454     * @param p2 parameter to the message.
3455     * @param p3 parameter to the message.
3456     */
3457    void trace(String message, Object p0, Object p1, Object p2, Object p3);
3458
3459    /**
3460     * Logs a message with parameters at trace level.
3461     *
3462     * @param message the message to log; the format depends on the message factory.
3463     * @param p0 parameter to the message.
3464     * @param p1 parameter to the message.
3465     * @param p2 parameter to the message.
3466     * @param p3 parameter to the message.
3467     * @param p4 parameter to the message.
3468     */
3469    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
3470
3471    /**
3472     * Logs a message with parameters at trace level.
3473     *
3474     * @param message the message to log; the format depends on the message factory.
3475     * @param p0 parameter to the message.
3476     * @param p1 parameter to the message.
3477     * @param p2 parameter to the message.
3478     * @param p3 parameter to the message.
3479     * @param p4 parameter to the message.
3480     * @param p5 parameter to the message.
3481     */
3482    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
3483
3484    /**
3485     * Logs a message with parameters at trace level.
3486     *
3487     * @param message the message to log; the format depends on the message factory.
3488     * @param p0 parameter to the message.
3489     * @param p1 parameter to the message.
3490     * @param p2 parameter to the message.
3491     * @param p3 parameter to the message.
3492     * @param p4 parameter to the message.
3493     * @param p5 parameter to the message.
3494     * @param p6 parameter to the message.
3495     */
3496    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
3497
3498    /**
3499     * Logs a message with parameters at trace level.
3500     *
3501     * @param message the message to log; the format depends on the message factory.
3502     * @param p0 parameter to the message.
3503     * @param p1 parameter to the message.
3504     * @param p2 parameter to the message.
3505     * @param p3 parameter to the message.
3506     * @param p4 parameter to the message.
3507     * @param p5 parameter to the message.
3508     * @param p6 parameter to the message.
3509     * @param p7 parameter to the message.
3510     */
3511    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
3512
3513    /**
3514     * Logs a message with parameters at trace level.
3515     *
3516     * @param message the message to log; the format depends on the message factory.
3517     * @param p0 parameter to the message.
3518     * @param p1 parameter to the message.
3519     * @param p2 parameter to the message.
3520     * @param p3 parameter to the message.
3521     * @param p4 parameter to the message.
3522     * @param p5 parameter to the message.
3523     * @param p6 parameter to the message.
3524     * @param p7 parameter to the message.
3525     * @param p8 parameter to the message.
3526     */
3527    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
3528            Object p8);
3529
3530    /**
3531     * Logs a message with parameters at trace level.
3532     *
3533     * @param message the message to log; the format depends on the message factory.
3534     * @param p0 parameter to the message.
3535     * @param p1 parameter to the message.
3536     * @param p2 parameter to the message.
3537     * @param p3 parameter to the message.
3538     * @param p4 parameter to the message.
3539     * @param p5 parameter to the message.
3540     * @param p6 parameter to the message.
3541     * @param p7 parameter to the message.
3542     * @param p8 parameter to the message.
3543     * @param p9 parameter to the message.
3544     */
3545    void trace(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
3546            Object p8, Object p9);
3547
3548    /**
3549     * Logs entry to a method. Used when the method in question has no parameters or when the parameters should not be
3550     * logged.
3551     *
3552     * @return built message
3553     * @since 2.6
3554     */
3555    EntryMessage traceEntry();
3556
3557    /**
3558     * Logs entry to a method along with its parameters. For example,
3559     *
3560     * <pre>
3561     * public void doSomething(String foo, int bar) {
3562     *     LOGGER.traceEntry("Parameters: {} and {}", foo, bar);
3563     *     // do something
3564     * }
3565     * </pre>
3566     * or:
3567     * <pre>
3568     * public int doSomething(String foo, int bar) {
3569     *     Message m = LOGGER.traceEntry("doSomething(foo={}, bar={})", foo, bar);
3570     *     // do something
3571     *     return traceExit(m, value);
3572     * }
3573     * </pre>
3574     *
3575     * @param format The format String for the parameters.
3576     * @param params The parameters to the method.
3577     * @return The built Message
3578     *
3579     * @since 2.6
3580     */
3581    EntryMessage traceEntry(String format, Object... params);
3582
3583    /**
3584     * Logs entry to a method along with its parameters. For example,
3585     *
3586     * <pre>
3587     * public void doSomething(Request foo) {
3588     *     LOGGER.traceEntry(()->gson.toJson(foo));
3589     *     // do something
3590     * }
3591     * </pre>
3592     *
3593     * @param paramSuppliers The Suppliers for the parameters to the method.
3594     * @return built message
3595     *
3596     * @since 2.6
3597     */
3598    EntryMessage traceEntry(Supplier<?>... paramSuppliers);
3599
3600    /**
3601     * Logs entry to a method along with its parameters. For example,
3602     *
3603     * <pre>
3604     * public void doSomething(String foo, int bar) {
3605     *     LOGGER.traceEntry("Parameters: {} and {}", ()->gson.toJson(foo), ()-> bar);
3606     *     // do something
3607     * }
3608     * </pre>
3609     *
3610     * @param format The format String for the parameters.
3611     * @param paramSuppliers The Suppliers for the parameters to the method.
3612     * @return built message
3613     *
3614     * @since 2.6
3615     */
3616    EntryMessage traceEntry(String format, Supplier<?>... paramSuppliers);
3617
3618    /**
3619     * Logs entry to a method using a Message to describe the parameters.
3620     * <pre>
3621     * public void doSomething(Request foo) {
3622     *     LOGGER.traceEntry(new JsonMessage(foo));
3623     *     // do something
3624     * }
3625     * </pre>
3626     * <p>
3627     * Avoid passing a {@code ReusableMessage} to this method (therefore, also avoid passing messages created by
3628     * calling {@code logger.getMessageFactory().newMessage("some message")}): Log4j will replace such messages with
3629     * an immutable message to prevent situations where the reused message instance is modified by subsequent calls to
3630     * the logger before the returned {@code EntryMessage} is fully processed.
3631     * </p>
3632     *
3633     * @param message The message. Avoid specifying a ReusableMessage, use immutable messages instead.
3634     * @return the built message
3635     *
3636     * @since 2.6
3637     * @see org.apache.logging.log4j.message.ReusableMessage
3638     */
3639    EntryMessage traceEntry(Message message);
3640
3641    /**
3642     * Logs exit from a method. Used for methods that do not return anything.
3643     *
3644     * @since 2.6
3645     */
3646    void traceExit();
3647
3648    /**
3649     * Logs exiting from a method with the result. This may be coded as:
3650     *
3651     * <pre>
3652     * return LOGGER.traceExit(myResult);
3653     * </pre>
3654     *
3655     * @param <R> The type of the parameter and object being returned.
3656     * @param result The result being returned from the method call.
3657     * @return the result.
3658     *
3659     * @since 2.6
3660     */
3661    <R> R traceExit(R result);
3662
3663    /**
3664     * Logs exiting from a method with the result. This may be coded as:
3665     *
3666     * <pre>
3667     * return LOGGER.traceExit("Result: {}", myResult);
3668     * </pre>
3669     *
3670     * @param <R> The type of the parameter and object being returned.
3671     * @param format The format String for the result.
3672     * @param result The result being returned from the method call.
3673     * @return the result.
3674     *
3675     * @since 2.6
3676     */
3677    <R> R traceExit(String format, R result);
3678
3679    /**
3680     * Logs exiting from a method with no result. Allows custom formatting of the result. This may be coded as:
3681     *
3682     * <pre>
3683     * public long doSomething(int a, int b) {
3684     *    EntryMessage m = traceEntry("doSomething(a={}, b={})", a, b);
3685     *    // ...
3686     *    return LOGGER.traceExit(m);
3687     * }
3688     * </pre>
3689     * @param message The Message containing the formatted result.
3690     *
3691     * @since 2.6
3692     */
3693    void traceExit(EntryMessage message);
3694
3695    /**
3696     * Logs exiting from a method with the result. Allows custom formatting of the result. This may be coded as:
3697     *
3698     * <pre>
3699     * public long doSomething(int a, int b) {
3700     *    EntryMessage m = traceEntry("doSomething(a={}, b={})", a, b);
3701     *    // ...
3702     *    return LOGGER.traceExit(m, myResult);
3703     * }
3704     * </pre>
3705     * @param message The Message containing the formatted result.
3706     * @param result The result being returned from the method call.
3707     *
3708     * @param <R> The type of the parameter and object being returned.
3709     * @return the result.
3710     *
3711     * @since 2.6
3712     */
3713    <R> R traceExit(EntryMessage message, R result);
3714
3715    /**
3716     * Logs exiting from a method with the result. Allows custom formatting of the result. This may be coded as:
3717     *
3718     * <pre>
3719     * return LOGGER.traceExit(new JsonMessage(myResult), myResult);
3720     * </pre>
3721     * @param message The Message containing the formatted result.
3722     * @param result The result being returned from the method call.
3723     *
3724     * @param <R> The type of the parameter and object being returned.
3725     * @return the result.
3726     *
3727     * @since 2.6
3728     */
3729    <R> R traceExit(Message message, R result);
3730
3731    /**
3732     * Logs a message with the specific Marker at the {@link Level#WARN WARN} level.
3733     *
3734     * @param marker the marker data specific to this log statement
3735     * @param message the message string to be logged
3736     */
3737    void warn(Marker marker, Message message);
3738
3739    /**
3740     * Logs a message with the specific Marker at the {@link Level#WARN WARN} level.
3741     *
3742     * @param marker the marker data specific to this log statement
3743     * @param message the message string to be logged
3744     * @param throwable A Throwable or null.
3745     */
3746    void warn(Marker marker, Message message, Throwable throwable);
3747
3748    /**
3749     * Logs a message which is only to be constructed if the logging level is the {@link Level#WARN WARN} level with the
3750     * specified Marker. The {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the
3751     * {@code Message}.
3752     *
3753     * @param marker the marker data specific to this log statement
3754     * @param messageSupplier A function, which when called, produces the desired log message.
3755     * @since 2.4
3756     */
3757    void warn(Marker marker, MessageSupplier messageSupplier);
3758
3759    /**
3760     * Logs a message (only to be constructed if the logging level is the {@link Level#WARN WARN} level) with the
3761     * specified Marker and including the stack warn of the {@link Throwable} <code>throwable</code> passed as parameter. The
3762     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
3763     *
3764     * @param marker the marker data specific to this log statement
3765     * @param messageSupplier A function, which when called, produces the desired log message.
3766     * @param throwable A Throwable or null.
3767     * @since 2.4
3768     */
3769    void warn(Marker marker, MessageSupplier messageSupplier, Throwable throwable);
3770
3771    /**
3772     * Logs a message CharSequence with the {@link Level#WARN WARN} level.
3773     *
3774     * @param marker the marker data specific to this log statement
3775     * @param message the message CharSequence to log.
3776     */
3777    void warn(Marker marker, CharSequence message);
3778
3779    /**
3780     * Logs a CharSequence at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3781     * <code>throwable</code> passed as parameter.
3782     *
3783     * @param marker the marker data specific to this log statement
3784     * @param message the message CharSequence to log.
3785     * @param throwable the {@code Throwable} to log, including its stack trace.
3786     */
3787    void warn(Marker marker, CharSequence message, Throwable throwable);
3788
3789    /**
3790     * Logs a message object with the {@link Level#WARN WARN} level.
3791     *
3792     * @param marker the marker data specific to this log statement
3793     * @param message the message object to log.
3794     */
3795    void warn(Marker marker, Object message);
3796
3797    /**
3798     * Logs a message at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3799     * <code>throwable</code> passed as parameter.
3800     *
3801     * @param marker the marker data specific to this log statement
3802     * @param message the message object to log.
3803     * @param throwable the {@code Throwable} to log, including its stack trace.
3804     */
3805    void warn(Marker marker, Object message, Throwable throwable);
3806
3807    /**
3808     * Logs a message object with the {@link Level#WARN WARN} level.
3809     *
3810     * @param marker the marker data specific to this log statement
3811     * @param message the message object to log.
3812     */
3813    void warn(Marker marker, String message);
3814
3815    /**
3816     * Logs a message with parameters at the {@link Level#WARN WARN} level.
3817     *
3818     * @param marker the marker data specific to this log statement.
3819     * @param message the message to log; the format depends on the message factory.
3820     * @param params parameters to the message.
3821     * @see #getMessageFactory()
3822     */
3823    void warn(Marker marker, String message, Object... params);
3824
3825    /**
3826     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#WARN
3827     * WARN} level.
3828     *
3829     * @param marker the marker data specific to this log statement
3830     * @param message the message to log; the format depends on the message factory.
3831     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
3832     * @since 2.4
3833     */
3834    void warn(Marker marker, String message, Supplier<?>... paramSuppliers);
3835
3836    /**
3837     * Logs a message at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3838     * <code>throwable</code> passed as parameter.
3839     *
3840     * @param marker the marker data specific to this log statement
3841     * @param message the message object to log.
3842     * @param throwable the {@code Throwable} to log, including its stack trace.
3843     */
3844    void warn(Marker marker, String message, Throwable throwable);
3845
3846    /**
3847     * Logs a message which is only to be constructed if the logging level is the {@link Level#WARN WARN} level with the
3848     * specified Marker.
3849     *
3850     * @param marker the marker data specific to this log statement
3851     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3852     *            message factory.
3853     * @since 2.4
3854     */
3855    void warn(Marker marker, Supplier<?> messageSupplier);
3856
3857    /**
3858     * Logs a message (only to be constructed if the logging level is the {@link Level#WARN WARN} level) with the
3859     * specified Marker and including the stack warn of the {@link Throwable} <code>throwable</code> passed as parameter.
3860     *
3861     * @param marker the marker data specific to this log statement
3862     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3863     *            message factory.
3864     * @param throwable A Throwable or null.
3865     * @since 2.4
3866     */
3867    void warn(Marker marker, Supplier<?> messageSupplier, Throwable throwable);
3868
3869    /**
3870     * Logs a message with the specific Marker at the {@link Level#WARN WARN} level.
3871     *
3872     * @param message the message string to be logged
3873     */
3874    void warn(Message message);
3875
3876    /**
3877     * Logs a message with the specific Marker at the {@link Level#WARN WARN} level.
3878     *
3879     * @param message the message string to be logged
3880     * @param throwable A Throwable or null.
3881     */
3882    void warn(Message message, Throwable throwable);
3883
3884    /**
3885     * Logs a message which is only to be constructed if the logging level is the {@link Level#WARN WARN} level. The
3886     * {@code MessageSupplier} may or may not use the {@link MessageFactory} to construct the {@code Message}.
3887     *
3888     * @param messageSupplier A function, which when called, produces the desired log message.
3889     * @since 2.4
3890     */
3891    void warn(MessageSupplier messageSupplier);
3892
3893    /**
3894     * Logs a message (only to be constructed if the logging level is the {@link Level#WARN WARN} level) including the
3895     * stack warn of the {@link Throwable} <code>throwable</code> passed as parameter. The {@code MessageSupplier} may or may
3896     * not use the {@link MessageFactory} to construct the {@code Message}.
3897     *
3898     * @param messageSupplier A function, which when called, produces the desired log message.
3899     * @param throwable the {@code Throwable} to log, including its stack warn.
3900     * @since 2.4
3901     */
3902    void warn(MessageSupplier messageSupplier, Throwable throwable);
3903
3904    /**
3905     * Logs a message CharSequence with the {@link Level#WARN WARN} level.
3906     *
3907     * @param message the message CharSequence to log.
3908     */
3909    void warn(CharSequence message);
3910
3911    /**
3912     * Logs a CharSequence at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3913     * <code>throwable</code> passed as parameter.
3914     *
3915     * @param message the message CharSequence to log.
3916     * @param throwable the {@code Throwable} to log, including its stack trace.
3917     */
3918    void warn(CharSequence message, Throwable throwable);
3919
3920    /**
3921     * Logs a message object with the {@link Level#WARN WARN} level.
3922     *
3923     * @param message the message object to log.
3924     */
3925    void warn(Object message);
3926
3927    /**
3928     * Logs a message at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3929     * <code>throwable</code> passed as parameter.
3930     *
3931     * @param message the message object to log.
3932     * @param throwable the {@code Throwable} to log, including its stack trace.
3933     */
3934    void warn(Object message, Throwable throwable);
3935
3936    /**
3937     * Logs a message object with the {@link Level#WARN WARN} level.
3938     *
3939     * @param message the message string to log.
3940     */
3941    void warn(String message);
3942
3943    /**
3944     * Logs a message with parameters at the {@link Level#WARN WARN} level.
3945     *
3946     * @param message the message to log; the format depends on the message factory.
3947     * @param params parameters to the message.
3948     * @see #getMessageFactory()
3949     */
3950    void warn(String message, Object... params);
3951
3952    /**
3953     * Logs a message with parameters which are only to be constructed if the logging level is the {@link Level#WARN
3954     * WARN} level.
3955     *
3956     * @param message the message to log; the format depends on the message factory.
3957     * @param paramSuppliers An array of functions, which when called, produce the desired log message parameters.
3958     * @since 2.4
3959     */
3960    void warn(String message, Supplier<?>... paramSuppliers);
3961
3962    /**
3963     * Logs a message at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
3964     * <code>throwable</code> passed as parameter.
3965     *
3966     * @param message the message object to log.
3967     * @param throwable the {@code Throwable} to log, including its stack trace.
3968     */
3969    void warn(String message, Throwable throwable);
3970
3971    /**
3972     * Logs a message which is only to be constructed if the logging level is the {@link Level#WARN WARN} level.
3973     *
3974     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3975     *            message factory.
3976     * @since 2.4
3977     */
3978    void warn(Supplier<?> messageSupplier);
3979
3980    /**
3981     * Logs a message (only to be constructed if the logging level is the {@link Level#WARN WARN} level) including the
3982     * stack warn of the {@link Throwable} <code>throwable</code> passed as parameter.
3983     *
3984     * @param messageSupplier A function, which when called, produces the desired log message; the format depends on the
3985     *            message factory.
3986     * @param throwable the {@code Throwable} to log, including its stack warn.
3987     * @since 2.4
3988     */
3989    void warn(Supplier<?> messageSupplier, Throwable throwable);
3990
3991    /**
3992     * Logs a message with parameters at warn level.
3993     *
3994     * @param marker the marker data specific to this log statement
3995     * @param message the message to log; the format depends on the message factory.
3996     * @param p0 parameter to the message.
3997     */
3998    void warn(Marker marker, String message, Object p0);
3999
4000    /**
4001     * Logs a message with parameters at warn level.
4002     *
4003     * @param marker the marker data specific to this log statement
4004     * @param message the message to log; the format depends on the message factory.
4005     * @param p0 parameter to the message.
4006     * @param p1 parameter to the message.
4007     */
4008    void warn(Marker marker, String message, Object p0, Object p1);
4009
4010    /**
4011     * Logs a message with parameters at warn level.
4012     *
4013     * @param marker the marker data specific to this log statement
4014     * @param message the message to log; the format depends on the message factory.
4015     * @param p0 parameter to the message.
4016     * @param p1 parameter to the message.
4017     * @param p2 parameter to the message.
4018     */
4019    void warn(Marker marker, String message, Object p0, Object p1, Object p2);
4020
4021    /**
4022     * Logs a message with parameters at warn level.
4023     *
4024     * @param marker the marker data specific to this log statement
4025     * @param message the message to log; the format depends on the message factory.
4026     * @param p0 parameter to the message.
4027     * @param p1 parameter to the message.
4028     * @param p2 parameter to the message.
4029     * @param p3 parameter to the message.
4030     */
4031    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3);
4032
4033    /**
4034     * Logs a message with parameters at warn level.
4035     *
4036     * @param marker the marker data specific to this log statement
4037     * @param message the message to log; the format depends on the message factory.
4038     * @param p0 parameter to the message.
4039     * @param p1 parameter to the message.
4040     * @param p2 parameter to the message.
4041     * @param p3 parameter to the message.
4042     * @param p4 parameter to the message.
4043     */
4044    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4);
4045
4046    /**
4047     * Logs a message with parameters at warn level.
4048     *
4049     * @param marker the marker data specific to this log statement
4050     * @param message the message to log; the format depends on the message factory.
4051     * @param p0 parameter to the message.
4052     * @param p1 parameter to the message.
4053     * @param p2 parameter to the message.
4054     * @param p3 parameter to the message.
4055     * @param p4 parameter to the message.
4056     * @param p5 parameter to the message.
4057     */
4058    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
4059
4060    /**
4061     * Logs a message with parameters at warn level.
4062     *
4063     * @param marker the marker data specific to this log statement
4064     * @param message the message to log; the format depends on the message factory.
4065     * @param p0 parameter to the message.
4066     * @param p1 parameter to the message.
4067     * @param p2 parameter to the message.
4068     * @param p3 parameter to the message.
4069     * @param p4 parameter to the message.
4070     * @param p5 parameter to the message.
4071     * @param p6 parameter to the message.
4072     */
4073    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5,
4074            Object p6);
4075
4076    /**
4077     * Logs a message with parameters at warn level.
4078     *
4079     * @param marker the marker data specific to this log statement
4080     * @param message the message to log; the format depends on the message factory.
4081     * @param p0 parameter to the message.
4082     * @param p1 parameter to the message.
4083     * @param p2 parameter to the message.
4084     * @param p3 parameter to the message.
4085     * @param p4 parameter to the message.
4086     * @param p5 parameter to the message.
4087     * @param p6 parameter to the message.
4088     * @param p7 parameter to the message.
4089     */
4090    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
4091            Object p7);
4092
4093    /**
4094     * Logs a message with parameters at warn level.
4095     *
4096     * @param marker the marker data specific to this log statement
4097     * @param message the message to log; the format depends on the message factory.
4098     * @param p0 parameter to the message.
4099     * @param p1 parameter to the message.
4100     * @param p2 parameter to the message.
4101     * @param p3 parameter to the message.
4102     * @param p4 parameter to the message.
4103     * @param p5 parameter to the message.
4104     * @param p6 parameter to the message.
4105     * @param p7 parameter to the message.
4106     * @param p8 parameter to the message.
4107     */
4108    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
4109            Object p7, Object p8);
4110
4111    /**
4112     * Logs a message with parameters at warn level.
4113     *
4114     * @param marker the marker data specific to this log statement
4115     * @param message the message to log; the format depends on the message factory.
4116     * @param p0 parameter to the message.
4117     * @param p1 parameter to the message.
4118     * @param p2 parameter to the message.
4119     * @param p3 parameter to the message.
4120     * @param p4 parameter to the message.
4121     * @param p5 parameter to the message.
4122     * @param p6 parameter to the message.
4123     * @param p7 parameter to the message.
4124     * @param p8 parameter to the message.
4125     * @param p9 parameter to the message.
4126     */
4127    void warn(Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6,
4128            Object p7, Object p8, Object p9);
4129
4130    /**
4131     * Logs a message with parameters at warn level.
4132     *
4133     * @param message the message to log; the format depends on the message factory.
4134     * @param p0 parameter to the message.
4135     */
4136    void warn(String message, Object p0);
4137
4138    /**
4139     * Logs a message with parameters at warn level.
4140     *
4141     * @param message the message to log; the format depends on the message factory.
4142     * @param p0 parameter to the message.
4143     * @param p1 parameter to the message.
4144     */
4145    void warn(String message, Object p0, Object p1);
4146
4147    /**
4148     * Logs a message with parameters at warn level.
4149     *
4150     * @param message the message to log; the format depends on the message factory.
4151     * @param p0 parameter to the message.
4152     * @param p1 parameter to the message.
4153     * @param p2 parameter to the message.
4154     */
4155    void warn(String message, Object p0, Object p1, Object p2);
4156
4157    /**
4158     * Logs a message with parameters at warn level.
4159     *
4160     * @param message the message to log; the format depends on the message factory.
4161     * @param p0 parameter to the message.
4162     * @param p1 parameter to the message.
4163     * @param p2 parameter to the message.
4164     * @param p3 parameter to the message.
4165     */
4166    void warn(String message, Object p0, Object p1, Object p2, Object p3);
4167
4168    /**
4169     * Logs a message with parameters at warn level.
4170     *
4171     * @param message the message to log; the format depends on the message factory.
4172     * @param p0 parameter to the message.
4173     * @param p1 parameter to the message.
4174     * @param p2 parameter to the message.
4175     * @param p3 parameter to the message.
4176     * @param p4 parameter to the message.
4177     */
4178    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4);
4179
4180    /**
4181     * Logs a message with parameters at warn level.
4182     *
4183     * @param message the message to log; the format depends on the message factory.
4184     * @param p0 parameter to the message.
4185     * @param p1 parameter to the message.
4186     * @param p2 parameter to the message.
4187     * @param p3 parameter to the message.
4188     * @param p4 parameter to the message.
4189     * @param p5 parameter to the message.
4190     */
4191    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5);
4192
4193    /**
4194     * Logs a message with parameters at warn level.
4195     *
4196     * @param message the message to log; the format depends on the message factory.
4197     * @param p0 parameter to the message.
4198     * @param p1 parameter to the message.
4199     * @param p2 parameter to the message.
4200     * @param p3 parameter to the message.
4201     * @param p4 parameter to the message.
4202     * @param p5 parameter to the message.
4203     * @param p6 parameter to the message.
4204     */
4205    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6);
4206
4207    /**
4208     * Logs a message with parameters at warn level.
4209     *
4210     * @param message the message to log; the format depends on the message factory.
4211     * @param p0 parameter to the message.
4212     * @param p1 parameter to the message.
4213     * @param p2 parameter to the message.
4214     * @param p3 parameter to the message.
4215     * @param p4 parameter to the message.
4216     * @param p5 parameter to the message.
4217     * @param p6 parameter to the message.
4218     * @param p7 parameter to the message.
4219     */
4220    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7);
4221
4222    /**
4223     * Logs a message with parameters at warn level.
4224     *
4225     * @param message the message to log; the format depends on the message factory.
4226     * @param p0 parameter to the message.
4227     * @param p1 parameter to the message.
4228     * @param p2 parameter to the message.
4229     * @param p3 parameter to the message.
4230     * @param p4 parameter to the message.
4231     * @param p5 parameter to the message.
4232     * @param p6 parameter to the message.
4233     * @param p7 parameter to the message.
4234     * @param p8 parameter to the message.
4235     */
4236    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
4237            Object p8);
4238
4239    /**
4240     * Logs a message with parameters at warn level.
4241     *
4242     * @param message the message to log; the format depends on the message factory.
4243     * @param p0 parameter to the message.
4244     * @param p1 parameter to the message.
4245     * @param p2 parameter to the message.
4246     * @param p3 parameter to the message.
4247     * @param p4 parameter to the message.
4248     * @param p5 parameter to the message.
4249     * @param p6 parameter to the message.
4250     * @param p7 parameter to the message.
4251     * @param p8 parameter to the message.
4252     * @param p9 parameter to the message.
4253     */
4254    void warn(String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7,
4255            Object p8, Object p9);
4256
4257    /**
4258     * Logs a Message.
4259     * @param level The logging Level to check.
4260     * @param marker A Marker or null.
4261     * @param fqcn The fully qualified class name of the logger entry point, used to determine the caller class and
4262     *            method when location information needs to be logged.
4263     * @param location The location of the caller.
4264     * @param message The message format.
4265     * @param throwable the {@code Throwable} to log, including its stack trace.
4266     * @since 2.13.0
4267     */
4268    default void logMessage(Level level, Marker marker, String fqcn, StackTraceElement location, Message message,
4269        Throwable throwable) {
4270        // noop
4271    }
4272
4273    /**
4274     * Construct a trace log event.
4275     * @return a LogBuilder.
4276     * @since 2.13.0
4277     */
4278    default LogBuilder atTrace() {
4279        return LogBuilder.NOOP;
4280    }
4281
4282    /**
4283     * Construct a trace log event.
4284     * @return a LogBuilder.
4285     * @since 2.13.0
4286     */
4287    default LogBuilder atDebug() {
4288        return LogBuilder.NOOP;
4289    }
4290
4291    /**
4292     * Construct a trace log event.
4293     * @return a LogBuilder.
4294     * @since 2.13.0
4295     */
4296    default LogBuilder atInfo() {
4297        return LogBuilder.NOOP;
4298    }
4299
4300    /**
4301     * Construct a trace log event.
4302     * @return a LogBuilder.
4303     * @since 2.13.0
4304     */
4305    default LogBuilder atWarn() {
4306        return LogBuilder.NOOP;
4307    }
4308
4309    /**
4310     * Construct a trace log event.
4311     * @return a LogBuilder.
4312     * @since 2.13.0
4313     */
4314    default LogBuilder atError() {
4315        return LogBuilder.NOOP;
4316    }
4317
4318    /**
4319     * Construct a trace log event.
4320     * @return a LogBuilder.
4321     * @since 2.13.0
4322     */
4323    default LogBuilder atFatal() {
4324        return LogBuilder.NOOP;
4325    }
4326
4327    /**
4328     * Construct a log event that will always be logged.
4329     * @return a LogBuilder.
4330     * @since 2.13.0
4331     */
4332    default LogBuilder always() {
4333        return LogBuilder.NOOP;
4334    }
4335
4336    /**
4337     * Construct a log event.
4338     * @param level Any level (ignoreed here).
4339     * @return a LogBuilder.
4340     * @since 2.13.0
4341     */
4342    default LogBuilder atLevel(Level level) {
4343        return LogBuilder.NOOP;
4344    }
4345
4346}