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}