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 com.google.common.annotations.Beta; 010import com.google.inject.assistedinject.Assisted; 011import org.slf4j.Logger; 012 013import javax.inject.Inject; 014import java.util.ResourceBundle; 015 016import static java.text.MessageFormat.format; 017 018/** 019 * {@code LogMessage} <b>needs documentation</b>. 020 * 021 * @author <a href="mailto:binkley@alumni.rice.edu">B. K. Oxley (binkley)</a> 022 * @todo Needs documentation. 023 */ 024@Beta 025public final class LogMessage { 026 private final Level level; 027 private final String message; 028 private final Object[] parameters; 029 030 @SuppressWarnings("AssignmentToCollectionOrArrayFieldFromParameter") 031 @Inject 032 public LogMessage(final ResourceBundle bundle, @Assisted final String key, 033 @Assisted final Object... parameters) { 034 this.parameters = parameters; 035 level = Level.valueOf(bundle.getString(key + ".level")); 036 message = bundle.getString(key + ".message"); 037 } 038 039 public void logTo(final Logger logger) { 040 logTo(logger, null, parameters); 041 } 042 043 public void logTo(final Logger logger, final Object... parameters) { 044 logTo(logger, null, parameters); 045 } 046 047 public void logTo(final Logger logger, final Throwable cause) { 048 logTo(logger, cause, parameters); 049 } 050 051 public void logTo(final Logger logger, final Throwable cause, final Object... parameters) { 052 level().log(logger, format(message(), parameters), cause); 053 } 054 055 public Level level() { 056 return level; 057 } 058 059 public String message() { 060 return message; 061 } 062 063 @Override 064 public String toString() { 065 return format(message, parameters); 066 } 067 068 @Beta 069 public interface Factory { 070 LogMessage create(final String key, final Object... parameters); 071 } 072}