001    /**
002     * $Id: LogRecorder.java,v 1.8 2014/04/05 10:13:13 oboehm Exp $
003     *
004     * Copyright (c) 2008 by Oliver Boehm
005     *
006     * Licensed under the Apache License, Version 2.0 (the "License");
007     * you may not use this file except in compliance with the License.
008     * You may obtain a copy of the License at
009     *
010     *   http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express orimplied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     *
018     * (c)reated 09.10.2008 by oliver (ob@oasd.de)
019     */
020    package patterntesting.runtime.log;
021    
022    import java.util.*;
023    
024    import org.slf4j.*;
025    
026    import patterntesting.annotation.check.runtime.NullArgsAllowed;
027    import patterntesting.runtime.util.Converter;
028    
029    /**
030     * The Class LogRecorder which is able to record log messages.
031     *
032     * @author <a href="boehm@javatux.de">oliver</a>
033     * @since 09.10.2008
034     * @version $Revision: 1.8 $
035     */
036    public final class LogRecorder implements Logger {
037    
038            private final List<String> objects = new ArrayList<String>();
039            private final List<Throwable> exceptions = new ArrayList<Throwable>();
040            private int n = 0;
041    
042            /**
043             * Debug.
044             *
045             * @param arg0 the arg0
046             * @see Logger#debug(String)
047             */
048            public void debug(final String arg0) {
049                    this.record(arg0);
050            }
051    
052            /**
053             * Debug.
054             *
055             * @param arg0 the arg0
056             * @param arg1 the arg1
057             * @see Logger#debug(String, Throwable)
058             */
059            public void debug(final String arg0, final Throwable arg1) {
060                    this.record(arg0, arg1);
061            }
062    
063            /**
064             * Error.
065             *
066             * @param arg0 the arg0
067             * @see Logger#error(String)
068             */
069            public void error(final String arg0) {
070                    this.record(arg0);
071            }
072    
073            /**
074             * Error.
075             *
076             * @param arg0 the arg0
077             * @param arg1 the arg1
078             * @see Logger#error(String, Throwable)
079             */
080            public void error(final String arg0, final Throwable arg1) {
081                    this.record(arg0, arg1);
082            }
083    
084            /**
085             * Info.
086             *
087             * @param arg0 the arg0
088             * @see Logger#info(String)
089             */
090            public void info(final String arg0) {
091                    this.record(arg0);
092            }
093    
094            /**
095             * Info.
096             *
097             * @param arg0 the arg0
098             * @param arg1 the arg1
099             * @see Logger#info(String, Throwable)
100             */
101            public void info(final String arg0, final Throwable arg1) {
102                    this.record(arg0, arg1);
103            }
104    
105            /**
106             * Checks if is debug enabled.
107             *
108             * @return true, if is debug enabled
109             * @see Logger#isDebugEnabled()
110             */
111            public boolean isDebugEnabled() {
112                    return false;
113            }
114    
115            /**
116             * Checks if is error enabled.
117             *
118             * @return true, if is error enabled
119             * @see Logger#isErrorEnabled()
120             */
121            public boolean isErrorEnabled() {
122                    return false;
123            }
124    
125            /**
126             * Checks if is info enabled.
127             *
128             * @return true, if is info enabled
129             * @see Logger#isInfoEnabled()
130             */
131            public boolean isInfoEnabled() {
132                    return false;
133            }
134    
135            /**
136             * Checks if is trace enabled.
137             *
138             * @return true, if is trace enabled
139             * @see Logger#isTraceEnabled()
140             */
141            public boolean isTraceEnabled() {
142                    return false;
143            }
144    
145            /**
146             * Checks if is warn enabled.
147             *
148             * @return true, if is warn enabled
149             * @see Logger#isWarnEnabled()
150             */
151            public boolean isWarnEnabled() {
152                    return false;
153            }
154    
155            /**
156             * Trace.
157             *
158             * @param arg0 the arg0
159             * @see Logger#trace(String)
160             */
161            public void trace(final String arg0) {
162                    this.record(arg0);
163            }
164    
165            /**
166             * Trace.
167             *
168             * @param arg0 the arg0
169             * @param arg1 the arg1
170             * @see Logger#trace(String, Throwable)
171             */
172            public void trace(final String arg0, final Throwable arg1) {
173                    this.record(arg0, arg1);
174            }
175    
176            /**
177             * Warn.
178             *
179             * @param arg0 the arg0
180             * @see Logger#warn(String)
181             */
182            public void warn(final String arg0) {
183                    this.record(arg0);
184            }
185    
186            /**
187             * Warn.
188             *
189             * @param arg0 the arg0
190             * @param arg1 the arg1
191             * @see Logger#warn(String, Throwable)
192             */
193            public void warn(final String arg0, final Throwable arg1) {
194                    this.record(arg0, arg1);
195            }
196    
197            /**
198             * Record.
199             *
200             * @param obj the obj
201             */
202            private void record(final String obj) {
203                this.objects.add(obj);
204            }
205    
206        /**
207         * Record.
208         *
209         * @param obj the obj
210         * @param t the t
211         */
212        @NullArgsAllowed
213        private synchronized void record(final String msg, final Object obj) {
214            this.objects.add(msg + ", " + obj);
215        }
216    
217        /**
218         * Record.
219         *
220         * @param obj the obj
221         * @param t the t
222         */
223        @NullArgsAllowed
224        private synchronized void record(final String msg, final Object[] objs) {
225            this.objects.add(msg + ", " + Converter.toString(objs));
226        }
227    
228        /**
229         * Record.
230         *
231         * @param arg0 the arg0
232         * @param arg1 the arg1
233         */
234        @NullArgsAllowed
235        private synchronized void record(final Marker arg0, final String arg1) {
236            this.objects.add(arg0 + ": " + arg1);
237        }
238    
239        /**
240         * Record.
241         *
242         * @param arg0 the arg0
243         * @param arg1 the arg1
244         * @param arg2 the arg2
245         */
246        @NullArgsAllowed
247        private synchronized void record(final String arg0, final Object arg1, final Object arg2) {
248            this.objects.add(arg0 + ", " + arg1 + ", " + arg2);
249        }
250    
251        /**
252         * Record.
253         *
254         * @param arg0 the arg0
255         * @param arg1 the arg1
256         * @param arg2 the arg2
257         */
258        @NullArgsAllowed
259        private synchronized void record(final Marker arg0, final String arg1, final Object arg2) {
260            this.objects.add(arg0 + ": " + arg1 + ", " + arg2);
261        }
262    
263        /**
264         * Record.
265         *
266         * @param arg0 the arg0
267         * @param arg1 the arg1
268         * @param arg2 the arg2
269         * @param arg3 the arg3
270         */
271        @NullArgsAllowed
272        private synchronized void record(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
273            this.objects.add(arg0 + ": " + arg1 + ", " + arg2 + ", " + arg3);
274        }
275    
276        /**
277         * Record.
278         *
279         * @param obj the obj
280         * @param t the t
281         */
282        @NullArgsAllowed
283        private synchronized void record(final String obj, final Throwable t) {
284            this.objects.add(obj);
285            this.exceptions.add(t);
286            this.n++;
287        }
288    
289        /**
290         * Record.
291         *
292         * @param arg0 the arg0
293         * @param arg1 the arg1
294         * @param arg2 the arg2
295         */
296        @NullArgsAllowed
297        private synchronized void record(final Marker arg0, final String arg1, final Throwable arg2) {
298            this.record(arg0 + ": " + arg1, arg2);
299        }
300    
301            /**
302             * Gets the text.
303             *
304             * @return the text
305             */
306            public String getText() {
307                StringBuilder text = new StringBuilder();
308                    for (Object obj : this.objects) {
309                        text.append(obj);
310                    }
311                    return text.toString().trim();
312            }
313    
314            /**
315             * Gets the record.
316             *
317             * @return the record
318             */
319            public String getRecord() {
320                    return getText();
321            }
322    
323            /**
324             * Gets the number of records.
325             *
326             * @return the number of records
327             */
328            public int getNumberOfRecords() {
329                    return n;
330            }
331    
332        /**
333         * To string.
334         *
335         * @return the string
336         * @see java.lang.Object#toString()
337         */
338        @Override
339        public String toString() {
340            String classname = this.getClass().getSimpleName();
341            if (n == 1) {
342                return classname + "(\"" + getRecord() + "\")";
343            } else {
344                return classname + " with " + n + " records";
345            }
346        }
347    
348    
349    
350        /////   new methods after switch from commons-logging to SLF4J   //////////
351    
352        /**
353         * Debug.
354         *
355         * @param arg0 the arg0
356         * @param arg1 the arg1
357         * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object)
358         */
359        public void debug(final String arg0, final Object arg1) {
360            this.record(arg0, arg1);
361        }
362    
363        /**
364         * Debug.
365         *
366         * @param arg0 the arg0
367         * @param arg1 the arg1
368         * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object[])
369         */
370        public void debug(final String arg0, final Object... arg1) {
371            this.record(arg0, arg1);
372        }
373    
374        /**
375         * Debug.
376         *
377         * @param arg0 the arg0
378         * @param arg1 the arg1
379         * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String)
380         */
381        public void debug(final Marker arg0, final String arg1) {
382            this.record(arg0, arg1);
383        }
384    
385        /**
386         * Debug.
387         *
388         * @param arg0 the arg0
389         * @param arg1 the arg1
390         * @param arg2 the arg2
391         * @see org.slf4j.Logger#debug(java.lang.String, java.lang.Object, java.lang.Object)
392         */
393        public void debug(final String arg0, final Object arg1, final Object arg2) {
394            this.record(arg0, arg1, arg2);
395        }
396    
397        /**
398         * Debug.
399         *
400         * @param arg0 the arg0
401         * @param arg1 the arg1
402         * @param arg2 the arg2
403         * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object)
404         */
405        public void debug(final Marker arg0, final String arg1, final Object arg2) {
406            this.record(arg0, arg1, arg2);
407        }
408    
409        /**
410         * Debug.
411         *
412         * @param arg0 the arg0
413         * @param arg1 the arg1
414         * @param arg2 the arg2
415         * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object[])
416         */
417        public void debug(final Marker arg0, final String arg1, final Object... arg2) {
418            this.record(arg0, arg1, arg2);
419        }
420    
421        /**
422         * Debug.
423         *
424         * @param arg0 the arg0
425         * @param arg1 the arg1
426         * @param arg2 the arg2
427         * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
428         */
429        public void debug(final Marker arg0, final String arg1, final Throwable arg2) {
430            this.record(arg0, arg1, arg2);
431        }
432    
433        /**
434         * Debug.
435         *
436         * @param arg0 the arg0
437         * @param arg1 the arg1
438         * @param arg2 the arg2
439         * @param arg3 the arg3
440         * @see org.slf4j.Logger#debug(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
441         */
442        public void debug(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
443            this.record(arg0, arg1, arg2, arg3);
444        }
445    
446        /**
447         * Error.
448         *
449         * @param arg0 the arg0
450         * @param arg1 the arg1
451         * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object)
452         */
453        public void error(final String arg0, final Object arg1) {
454            this.record(arg0, arg1);
455        }
456    
457        /**
458         * Error.
459         *
460         * @param arg0 the arg0
461         * @param arg1 the arg1
462         * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object[])
463         */
464        public void error(final String arg0, final Object... arg1) {
465            this.record(arg0, arg1);
466        }
467    
468        /**
469         * Error.
470         *
471         * @param arg0 the arg0
472         * @param arg1 the arg1
473         * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String)
474         */
475        public void error(final Marker arg0, final String arg1) {
476            this.record(arg0, arg1);
477        }
478    
479        /**
480         * Error.
481         *
482         * @param arg0 the arg0
483         * @param arg1 the arg1
484         * @param arg2 the arg2
485         * @see org.slf4j.Logger#error(java.lang.String, java.lang.Object, java.lang.Object)
486         */
487        public void error(final String arg0, final Object arg1, final Object arg2) {
488            this.record(arg0, arg1, arg2);
489        }
490    
491        /**
492         * Error.
493         *
494         * @param arg0 the arg0
495         * @param arg1 the arg1
496         * @param arg2 the arg2
497         * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object)
498         */
499        public void error(final Marker arg0, final String arg1, final Object arg2) {
500            this.record(arg0, arg1, arg2);
501        }
502    
503        /**
504         * Error.
505         *
506         * @param arg0 the arg0
507         * @param arg1 the arg1
508         * @param arg2 the arg2
509         * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object[])
510         */
511        public void error(final Marker arg0, final String arg1, final Object... arg2) {
512            this.record(arg0, arg1, arg2);
513        }
514    
515        /**
516         * Error.
517         *
518         * @param arg0 the arg0
519         * @param arg1 the arg1
520         * @param arg2 the arg2
521         * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
522         */
523        public void error(final Marker arg0, final String arg1, final Throwable arg2) {
524            this.record(arg0, arg1, arg2);
525        }
526    
527        /**
528         * Error.
529         *
530         * @param arg0 the arg0
531         * @param arg1 the arg1
532         * @param arg2 the arg2
533         * @param arg3 the arg3
534         * @see org.slf4j.Logger#error(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
535         */
536        public void error(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
537            this.record(arg0, arg1, arg2, arg3);
538        }
539    
540        /**
541         * Gets the name.
542         *
543         * @return the name
544         * @see org.slf4j.Logger#getName()
545         */
546        public String getName() {
547            return "LogRecorder";
548        }
549    
550        /**
551         * Info.
552         *
553         * @param arg0 the arg0
554         * @param arg1 the arg1
555         * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object)
556         */
557        public void info(final String arg0, final Object arg1) {
558            this.record(arg0, arg1);
559        }
560    
561        /**
562         * Info.
563         *
564         * @param arg0 the arg0
565         * @param arg1 the arg1
566         * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object[])
567         */
568        public void info(final String arg0, final Object... arg1) {
569            this.record(arg0, arg1);
570        }
571    
572        /**
573         * Info.
574         *
575         * @param arg0 the arg0
576         * @param arg1 the arg1
577         * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String)
578         */
579        public void info(final Marker arg0, final String arg1) {
580            this.record(arg0, arg1);
581        }
582    
583        /**
584         * Info.
585         *
586         * @param arg0 the arg0
587         * @param arg1 the arg1
588         * @param arg2 the arg2
589         * @see org.slf4j.Logger#info(java.lang.String, java.lang.Object, java.lang.Object)
590         */
591        public void info(final String arg0, final Object arg1, final Object arg2) {
592            this.record(arg0, arg1, arg2);
593        }
594    
595        /**
596         * Info.
597         *
598         * @param arg0 the arg0
599         * @param arg1 the arg1
600         * @param arg2 the arg2
601         * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object)
602         */
603        public void info(final Marker arg0, final String arg1, final Object arg2) {
604            this.record(arg0, arg1, arg2);
605        }
606    
607        /**
608         * Info.
609         *
610         * @param arg0 the arg0
611         * @param arg1 the arg1
612         * @param arg2 the arg2
613         * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object[])
614         */
615        public void info(final Marker arg0, final String arg1, final Object... arg2) {
616            this.record(arg0, arg1, arg2);
617        }
618    
619        /**
620         * Info.
621         *
622         * @param arg0 the arg0
623         * @param arg1 the arg1
624         * @param arg2 the arg2
625         * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
626         */
627        public void info(final Marker arg0, final String arg1, final Throwable arg2) {
628            this.record(arg0, arg1, arg2);
629        }
630    
631        /**
632         * Info.
633         *
634         * @param arg0 the arg0
635         * @param arg1 the arg1
636         * @param arg2 the arg2
637         * @param arg3 the arg3
638         * @see org.slf4j.Logger#info(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
639         */
640        public void info(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
641            this.record(arg0, arg1, arg2, arg3);
642        }
643    
644        /**
645         * Checks if is debug enabled.
646         *
647         * @param arg0 the arg0
648         * @return true, if is debug enabled
649         * @see org.slf4j.Logger#isDebugEnabled(org.slf4j.Marker)
650         */
651        public boolean isDebugEnabled(final Marker arg0) {
652            return false;
653        }
654    
655        /**
656         * Checks if is error enabled.
657         *
658         * @param arg0 the arg0
659         * @return true, if is error enabled
660         * @see org.slf4j.Logger#isErrorEnabled(org.slf4j.Marker)
661         */
662        public boolean isErrorEnabled(final Marker arg0) {
663            return false;
664        }
665    
666        /**
667         * Checks if is info enabled.
668         *
669         * @param arg0 the arg0
670         * @return true, if is info enabled
671         * @see org.slf4j.Logger#isInfoEnabled(org.slf4j.Marker)
672         */
673        public boolean isInfoEnabled(final Marker arg0) {
674            return false;
675        }
676    
677        /**
678         * Checks if is trace enabled.
679         *
680         * @param arg0 the arg0
681         * @return true, if is trace enabled
682         * @see org.slf4j.Logger#isTraceEnabled(org.slf4j.Marker)
683         */
684        public boolean isTraceEnabled(final Marker arg0) {
685            return false;
686        }
687    
688        /**
689         * Checks if is warn enabled.
690         *
691         * @param arg0 the arg0
692         * @return true, if is warn enabled
693         * @see org.slf4j.Logger#isWarnEnabled(org.slf4j.Marker)
694         */
695        public boolean isWarnEnabled(final Marker arg0) {
696            return false;
697        }
698    
699        /**
700         * Trace.
701         *
702         * @param arg0 the arg0
703         * @param arg1 the arg1
704         * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object)
705         */
706        public void trace(final String arg0, final Object arg1) {
707            this.record(arg0, arg1);
708        }
709    
710        /**
711         * Trace.
712         *
713         * @param arg0 the arg0
714         * @param arg1 the arg1
715         * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object[])
716         */
717        public void trace(final String arg0, final Object... arg1) {
718            this.record(arg0, arg1);
719        }
720    
721        /**
722         * Trace.
723         *
724         * @param arg0 the arg0
725         * @param arg1 the arg1
726         * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String)
727         */
728        public void trace(final Marker arg0, final String arg1) {
729            this.record(arg0, arg1);
730        }
731    
732        /**
733         * Trace.
734         *
735         * @param arg0 the arg0
736         * @param arg1 the arg1
737         * @param arg2 the arg2
738         * @see org.slf4j.Logger#trace(java.lang.String, java.lang.Object, java.lang.Object)
739         */
740        public void trace(final String arg0, final Object arg1, final Object arg2) {
741            this.record(arg0, arg1, arg2);
742        }
743    
744        /**
745         * Trace.
746         *
747         * @param arg0 the arg0
748         * @param arg1 the arg1
749         * @param arg2 the arg2
750         * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object)
751         */
752        public void trace(final Marker arg0, final String arg1, final Object arg2) {
753            this.record(arg0, arg1, arg2);
754        }
755    
756        /**
757         * Trace.
758         *
759         * @param arg0 the arg0
760         * @param arg1 the arg1
761         * @param arg2 the arg2
762         * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object[])
763         */
764        public void trace(final Marker arg0, final String arg1, final Object... arg2) {
765            this.record(arg0, arg1, arg2);
766        }
767    
768        /**
769         * Trace.
770         *
771         * @param arg0 the arg0
772         * @param arg1 the arg1
773         * @param arg2 the arg2
774         * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
775         */
776        public void trace(final Marker arg0, final String arg1, final Throwable arg2) {
777            this.record(arg0, arg1, arg2);
778        }
779    
780        /**
781         * Trace.
782         *
783         * @param arg0 the arg0
784         * @param arg1 the arg1
785         * @param arg2 the arg2
786         * @param arg3 the arg3
787         * @see org.slf4j.Logger#trace(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
788         */
789        public void trace(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
790            this.record(arg0, arg1, arg2, arg3);
791        }
792    
793        /**
794         * Warn.
795         *
796         * @param arg0 the arg0
797         * @param arg1 the arg1
798         * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object)
799         */
800        public void warn(final String arg0, final Object arg1) {
801            this.record(arg0, arg1);
802        }
803    
804        /**
805         * Warn.
806         *
807         * @param arg0 the arg0
808         * @param arg1 the arg1
809         * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object[])
810         */
811        public void warn(final String arg0, final Object... arg1) {
812            this.record(arg0, arg1);
813        }
814    
815        /**
816         * Warn.
817         *
818         * @param arg0 the arg0
819         * @param arg1 the arg1
820         * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String)
821         */
822        public void warn(final Marker arg0, final String arg1) {
823            this.record(arg0, arg1);
824        }
825    
826        /**
827         * Warn.
828         *
829         * @param arg0 the arg0
830         * @param arg1 the arg1
831         * @param arg2 the arg2
832         * @see org.slf4j.Logger#warn(java.lang.String, java.lang.Object, java.lang.Object)
833         */
834        public void warn(final String arg0, final Object arg1, final Object arg2) {
835            this.record(arg0, arg1, arg2);
836        }
837    
838        /**
839         * Warn.
840         *
841         * @param arg0 the arg0
842         * @param arg1 the arg1
843         * @param arg2 the arg2
844         * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object)
845         */
846        public void warn(final Marker arg0, final String arg1, final Object arg2) {
847            this.record(arg0, arg1, arg2);
848        }
849    
850        /**
851         * Warn.
852         *
853         * @param arg0 the arg0
854         * @param arg1 the arg1
855         * @param arg2 the arg2
856         * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object[])
857         */
858        public void warn(final Marker arg0, final String arg1, final Object... arg2) {
859            this.record(arg0, arg1, arg2);
860        }
861    
862        /**
863         * Warn.
864         *
865         * @param arg0 the arg0
866         * @param arg1 the arg1
867         * @param arg2 the arg2
868         * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Throwable)
869         */
870        public void warn(final Marker arg0, final String arg1, final Throwable arg2) {
871            this.record(arg0, arg1, arg2);
872        }
873    
874        /**
875         * Warn.
876         *
877         * @param arg0 the arg0
878         * @param arg1 the arg1
879         * @param arg2 the arg2
880         * @param arg3 the arg3
881         * @see org.slf4j.Logger#warn(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object)
882         */
883        public void warn(final Marker arg0, final String arg1, final Object arg2, final Object arg3) {
884            this.record(arg0, arg1, arg2, arg3);
885        }
886    
887    }