001package org.kuali.common.util.log.log4j.model; 002 003import java.util.ArrayList; 004import java.util.Collections; 005import java.util.List; 006 007import javax.xml.bind.annotation.XmlAttribute; 008import javax.xml.bind.annotation.XmlElement; 009import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 010 011import org.kuali.common.util.Assert; 012import org.kuali.common.util.CollectionUtils; 013import org.kuali.common.util.nullify.NullUtils; 014import org.kuali.common.util.xml.jaxb.adapter.OmitNoneStringAdapter; 015import org.kuali.common.util.xml.jaxb.adapter.OmitTrueAdapter; 016 017public class Logger { 018 019 public static final List<Logger> EMPTY = Collections.<Logger> emptyList(); 020 public static final boolean DEFAULT_ADDITIVITY = true; 021 public static final Logger DEFAULT = new Logger(); 022 023 @XmlAttribute 024 @XmlJavaTypeAdapter(OmitNoneStringAdapter.class) 025 private final String name; 026 027 @XmlElement(name = "appender-ref") 028 private final List<AppenderRef> references; 029 030 @XmlElement 031 private final Level level; 032 033 @XmlAttribute 034 @XmlJavaTypeAdapter(OmitTrueAdapter.class) 035 private final Boolean additivity; 036 037 private Logger() { 038 this(NullUtils.NONE, AppenderRef.EMPTY, Level.DEFAULT); 039 } 040 041 public Logger(String name, Level level) { 042 this(name, AppenderRef.EMPTY, level, DEFAULT_ADDITIVITY); 043 } 044 045 public Logger(String name, List<AppenderRef> references) { 046 this(name, references, Level.DEFAULT, DEFAULT_ADDITIVITY); 047 } 048 049 public Logger(String name, List<AppenderRef> references, Level level) { 050 this(name, references, level, DEFAULT_ADDITIVITY); 051 } 052 053 public Logger(String name, List<AppenderRef> references, Level level, boolean additivity) { 054 Assert.noBlanks(name); 055 Assert.noNulls(references, level); 056 this.name = name; 057 this.references = new ArrayList<AppenderRef>(references); 058 this.level = level; 059 this.additivity = additivity; 060 } 061 062 public List<AppenderRef> getReferences() { 063 return Collections.unmodifiableList(references); 064 } 065 066 public boolean getAdditivity() { 067 return additivity; 068 } 069 070 public String getName() { 071 return name; 072 } 073 074 public Level getLevel() { 075 return level; 076 } 077 078 public static boolean isThresholdNull(Logger logger) { 079 return Threshold.NULL.equals(logger.getLevel().getValue()); 080 } 081 082 public static Logger getRootLogger(AppenderRef reference, Level level) { 083 return getRootLogger(CollectionUtils.singletonList(reference), level); 084 } 085 086 public static Logger getRootLogger(List<AppenderRef> references, Level level) { 087 return new Logger(NullUtils.NONE, references, level); 088 } 089}