001/* 002 * This is free and unencumbered software released into the public domain. 003 * 004 * Please see https://github.com/binkley/binkley/blob/master/LICENSE.md. 005 */ 006 007package hm.binkley.util.logging; 008 009import org.slf4j.Logger; 010import org.slf4j.Marker; 011import org.slf4j.ext.LoggerWrapper; 012 013import javax.annotation.Nonnull; 014 015/** 016 * {@code MarkedLogger} is an SLF4J logger with a default marker applied to all methods with a 017 * marker variant. 018 * <p/> 019 * Example: <pre> 020 * final Marker marker = MarkerFactory.getMarker("AUDIT"); 021 * final Logger logger = new MarkedLogger(LoggerFactory.getLogger(getClass()), marker); 022 * logger.error("Missing counterparty details on order: {}", order); 023 * logger.error(marker, "Missing counterparty details on order: {}", order); 024 * </pre> 025 * Marks this logging event as "AUDIT". Suitable logger configuration might redirect this event to 026 * Remedy. Both logging lines are equivalent. 027 * <p/> 028 * In Logback configuration use {@code %marker} to print the marker in the encoder pattern. 029 * 030 * @author <a href="mailto:binkley@alumni.rice.edu">B. K. Oxley (binkley)</a> 031 */ 032public class MarkedLogger 033 extends LoggerWrapper { 034 private final Marker marker; 035 036 /** 037 * Gets the underlying wrapped logger for extensions. 038 * 039 * @return the underlying logger, never missing 040 */ 041 @Nonnull 042 public final Logger getUnderlying() { 043 return logger; 044 } 045 046 /** 047 * Constructds a new {@code MarkedLogger} for the given parameters. 048 * 049 * @param logger the logger to delegate to, never missing 050 * @param marker the marker for unmarked logging, never missing 051 */ 052 public MarkedLogger(@Nonnull final Logger logger, @Nonnull final Marker marker) { 053 this(logger, MarkedLogger.class.getName(), marker); 054 } 055 056 /** 057 * Constructds a new {@code MarkedLogger} for the given parameters suitable as a base class. 058 * 059 * @param logger the logger to delegate to, never missing 060 * @param fqcn the fully-qualified class name of the extending logger, never missing 061 * @param marker the marker for unmarked logging, never missing 062 */ 063 public MarkedLogger(@Nonnull final Logger logger, @Nonnull final String fqcn, 064 @Nonnull final Marker marker) { 065 super(logger, fqcn); 066 this.marker = marker; 067 } 068 069 @Override 070 public void trace(final String msg) { 071 trace(marker, msg); 072 } 073 074 @Override 075 public void trace(final String format, final Object arg) { 076 trace(marker, format, arg); 077 } 078 079 @Override 080 public void trace(final String format, final Object arg1, final Object arg2) { 081 trace(marker, format, arg1, arg2); 082 } 083 084 @Override 085 public void trace(final String format, final Object... args) { 086 trace(marker, format, args); 087 } 088 089 @Override 090 public void trace(final String msg, final Throwable t) { 091 trace(marker, msg, t); 092 } 093 094 @Override 095 public void debug(final String msg) { 096 debug(marker, msg); 097 } 098 099 @Override 100 public void debug(final String format, final Object arg) { 101 debug(marker, format, arg); 102 } 103 104 @Override 105 public void debug(final String format, final Object arg1, final Object arg2) { 106 debug(marker, format, arg1, arg2); 107 } 108 109 @Override 110 public void debug(final String format, final Object... args) { 111 debug(marker, format, args); 112 } 113 114 @Override 115 public void debug(final String msg, final Throwable t) { 116 debug(marker, msg, t); 117 } 118 119 @Override 120 public void info(final String msg) { 121 info(marker, msg); 122 } 123 124 @Override 125 public void info(final String format, final Object arg) { 126 info(marker, format, arg); 127 } 128 129 @Override 130 public void info(final String format, final Object arg1, final Object arg2) { 131 info(marker, format, arg1, arg2); 132 } 133 134 @Override 135 public void info(final String format, final Object... args) { 136 info(marker, format, args); 137 } 138 139 @Override 140 public void info(final String msg, final Throwable t) { 141 info(marker, msg, t); 142 } 143 144 @Override 145 public void warn(final String msg) { 146 warn(marker, msg); 147 } 148 149 @Override 150 public void warn(final String format, final Object arg) { 151 warn(marker, format, arg); 152 } 153 154 @Override 155 public void warn(final String format, final Object arg1, final Object arg2) { 156 warn(marker, format, arg1, arg2); 157 } 158 159 @Override 160 public void warn(final String format, final Object... args) { 161 warn(marker, format, args); 162 } 163 164 @Override 165 public void warn(final String msg, final Throwable t) { 166 warn(marker, msg, t); 167 } 168 169 @Override 170 public void error(final String msg) { 171 error(marker, msg); 172 } 173 174 @Override 175 public void error(final String format, final Object arg) { 176 error(marker, format, arg); 177 } 178 179 @Override 180 public void error(final String format, final Object arg1, final Object arg2) { 181 error(marker, format, arg1, arg2); 182 } 183 184 @Override 185 public void error(final String format, final Object... args) { 186 error(marker, format, args); 187 } 188 189 @Override 190 public void error(final String msg, final Throwable t) { 191 error(marker, msg, t); 192 } 193}