17ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu/** 27ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch 37ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * All rights reserved. 47ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * 57ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Permission is hereby granted, free of charge, to any person obtaining 67ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * a copy of this software and associated documentation files (the 77ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * "Software"), to deal in the Software without restriction, including 87ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * without limitation the rights to use, copy, modify, merge, publish, 97ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * distribute, sublicense, and/or sell copies of the Software, and to 107ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * permit persons to whom the Software is furnished to do so, subject to 117ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * the following conditions: 127ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * 137ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * The above copyright notice and this permission notice shall be 147ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * included in all copies or substantial portions of the Software. 157ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * 167ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 177ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 187ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 197ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 207ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 217ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 227ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 237ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * 2488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */ 2588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupackage org.slf4j.cal10n; 2688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu 2788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Logger; 2888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Marker; 2988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.MarkerFactory; 3088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.ext.LoggerWrapper; 3188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.spi.LocationAwareLogger; 3288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu 3388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport ch.qos.cal10n.IMessageConveyor; 3488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport ch.qos.cal10n.MessageParameterObj; 3588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu 3688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu/** 379f10490a05f7344f4b3ef657e8991f5d51934e2fCeki Gulcu * A logger specialized in localized logging. Localization is based in the <a 3888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * href="http://cal10n.qos.ch">CAL10N project</p>. 3988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * 4088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author Ceki Gülcü 4188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */ 4288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupublic class LocLogger extends LoggerWrapper implements Logger { 4388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu 4431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu private static final String FQCN = LocLogger.class.getName(); 4531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 4631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 4731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Every localized message logged by a LocLogger will bear this marker. It 4831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * allows marker-aware implementations to perform additional processing on 4931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * localized messages. 5031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 5131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu static Marker LOCALIZED = MarkerFactory.getMarker("LOCALIZED"); 5231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 5331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu final IMessageConveyor imc; 5431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 5531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public LocLogger(Logger logger, IMessageConveyor imc) { 5631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu super(logger, LoggerWrapper.class.getName()); 5731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (imc == null) { 5831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu throw new IllegalArgumentException("IMessageConveyor cannot be null"); 5931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu this.imc = imc; 6188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 6231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Log a localized message at the TRACE level. 6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * 6631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param key 6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * the key used for localization 6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param args 6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * optional arguments 7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public void trace(Enum<?> key, Object... args) { 7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (!logger.isTraceEnabled()) { 7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu return; 7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 7531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu String translatedMsg = imc.getMessage(key, args); 7631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu MessageParameterObj mpo = new MessageParameterObj(key, args); 7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (instanceofLAL) { 7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.TRACE_INT, translatedMsg, args, null); 8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } else { 8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu logger.trace(LOCALIZED, translatedMsg, mpo); 8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 8388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 8431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 8531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 8631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Log a localized message at the DEBUG level. 8731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * 8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param key 8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * the key used for localization 9031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param args 9131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * optional arguments 9231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 9331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public void debug(Enum<?> key, Object... args) { 9431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (!logger.isDebugEnabled()) { 9531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu return; 9631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 9731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu String translatedMsg = imc.getMessage(key, args); 9831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu MessageParameterObj mpo = new MessageParameterObj(key, args); 9931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 10031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (instanceofLAL) { 10131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.DEBUG_INT, translatedMsg, args, null); 10231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } else { 10331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu logger.debug(LOCALIZED, translatedMsg, mpo); 10431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 10588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 10631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 10731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 10831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Log a localized message at the INFO level. 10931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * 11031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param key 11131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * the key used for localization 11231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param args 11331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * optional arguments 11431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 11531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public void info(Enum<?> key, Object... args) { 11631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (!logger.isInfoEnabled()) { 11731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu return; 11831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 11931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu String translatedMsg = imc.getMessage(key, args); 12031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu MessageParameterObj mpo = new MessageParameterObj(key, args); 12131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 12231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (instanceofLAL) { 12331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.INFO_INT, translatedMsg, args, null); 12431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } else { 12531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu logger.info(LOCALIZED, translatedMsg, mpo); 12631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 12788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 12831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 12931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 13031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Log a localized message at the WARN level. 13131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * 13231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param key 13331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * the key used for localization 13431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param args 13531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * optional arguments 13631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 13731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public void warn(Enum<?> key, Object... args) { 13831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (!logger.isWarnEnabled()) { 13931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu return; 14031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 14131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu String translatedMsg = imc.getMessage(key, args); 14231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu MessageParameterObj mpo = new MessageParameterObj(key, args); 14331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 14431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (instanceofLAL) { 14531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.WARN_INT, translatedMsg, args, null); 14631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } else { 14731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu logger.warn(LOCALIZED, translatedMsg, mpo); 14831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 14988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 15031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 15131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu /** 15231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * Log a localized message at the ERROR level. 15331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * 15431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param key 15531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * the key used for localization 15631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * @param args 15731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu * optional arguments 15831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu */ 15931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu public void error(Enum<?> key, Object... args) { 16031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (!logger.isErrorEnabled()) { 16131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu return; 16231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 16331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu String translatedMsg = imc.getMessage(key, args); 16431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu MessageParameterObj mpo = new MessageParameterObj(key, args); 16531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu 16631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu if (instanceofLAL) { 16731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.ERROR_INT, translatedMsg, args, null); 16831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } else { 16931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu logger.error(LOCALIZED, translatedMsg, mpo); 17031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu } 17188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu } 17288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu 17388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu} 174