001package org.javasimon.callback.logging;
002
003import org.slf4j.Logger;
004import org.slf4j.LoggerFactory;
005import org.slf4j.Marker;
006import org.slf4j.MarkerFactory;
007
008/**
009 * Concrete log template using SLF4J {@link Logger}.
010 *
011 * @author gquintana
012 * @since 3.2
013 */
014@SuppressWarnings("UnusedDeclaration")
015public abstract class SLF4JLogTemplate<C> extends LogTemplate<C> {
016
017        /** Logger. */
018        protected final Logger logger;
019
020        /** Marker, can be null. */
021        protected final Marker marker;
022
023        /**
024         * Constructor with {@link Logger} and {@link Marker}.
025         *
026         * @param logger logger
027         * @param marker Marker (can be null)
028         */
029        protected SLF4JLogTemplate(Logger logger, Marker marker) {
030                this.logger = logger;
031                this.marker = marker;
032        }
033
034        /**
035         * Constructor with logger name and marker name.
036         *
037         * @param loggerName logger name
038         * @param markerName marker name (can be null)
039         */
040        protected SLF4JLogTemplate(String loggerName, String markerName) {
041                this.logger = LoggerFactory.getLogger(loggerName);
042                this.marker = markerName == null ? null : MarkerFactory.getMarker(markerName);
043        }
044
045        /**
046         * Returns logger.
047         *
048         * @return logger
049         */
050        public Logger getLogger() {
051                return logger;
052        }
053
054        /**
055         * Returns marker.
056         *
057         * @return marker
058         */
059        public Marker getMarker() {
060                return marker;
061        }
062
063        /** SLF4J Log template with DEBUG level. */
064        public static class Debug<C> extends SLF4JLogTemplate<C> {
065                public Debug(String loggerName, String markerName) {
066                        super(loggerName, markerName);
067                }
068
069                public Debug(Logger logger, Marker marker) {
070                        super(logger, marker);
071                }
072
073                @Override
074                protected boolean isEnabled(C context) {
075                        return logger.isDebugEnabled(marker);
076                }
077
078                @Override
079                protected void log(String message) {
080                        logger.debug(marker, message);
081                }
082        }
083
084        /** SLF4J Log template with INFO level. */
085        public static class Info<C> extends SLF4JLogTemplate<C> {
086                public Info(String loggerName, String markerName) {
087                        super(loggerName, markerName);
088                }
089
090                public Info(Logger logger, Marker marker) {
091                        super(logger, marker);
092                }
093
094                @Override
095                protected boolean isEnabled(C context) {
096                        return logger.isInfoEnabled(marker);
097                }
098
099                @Override
100                protected void log(String message) {
101                        logger.info(marker, message);
102                }
103        }
104
105        /** SLF4J Log template with WARN level. */
106        public static class Warn<C> extends SLF4JLogTemplate<C> {
107                public Warn(String loggerName, String markerName) {
108                        super(loggerName, markerName);
109                }
110
111                public Warn(Logger logger, Marker marker) {
112                        super(logger, marker);
113                }
114
115                @Override
116                protected boolean isEnabled(C context) {
117                        return logger.isWarnEnabled(marker);
118                }
119
120                @Override
121                protected void log(String message) {
122                        logger.warn(marker, message);
123                }
124        }
125}