/*
* This file is part of HoloAPI.
*
* HoloAPI is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HoloAPI is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HoloAPI. If not, see <http://www.gnu.org/licenses/>.
*/
package com.dsh105.holoapi;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class ModuleLogger extends Logger {
private final String[] modulePath;
private final String prefix;
public ModuleLogger(String... modulePath) {
this(Bukkit.getLogger(), modulePath);
}
public ModuleLogger(Logger parent, String... modulePath) {
super(StringUtils.join(modulePath, "."), null);
this.setParent(parent);
this.setLevel(Level.ALL);
this.modulePath = modulePath;
StringBuilder builder = new StringBuilder();
for (String module : modulePath) {
builder.append("[").append(module).append("] ");
}
this.prefix = builder.toString();
}
public ModuleLogger getModule(String... path) {
return new ModuleLogger(this.getParent(), appendArray(this.modulePath, path));
}
@Override
public void log(LogRecord logRecord) {
logRecord.setMessage(this.prefix + logRecord.getMessage());
super.log(logRecord);
}
protected static boolean nullOrEmpty(Object[] array) {
return array == null || array.length != 0;
}
protected static boolean nullOrEmpty(Collection<?> collection) {
return collection == null || collection.isEmpty();
}
protected static <T> T[] createArray(Class<T> type, int length) {
return (T[]) Array.newInstance(type, length);
}
protected static <T> T[] appendArray(T[] array, T... values) {
if (nullOrEmpty(array)) {
return values;
}
if (nullOrEmpty(values)) {
return array;
}
T[] rval = createArray((Class<T>) array.getClass().getComponentType(), array.length + values.length);
System.arraycopy(array, 0, rval, 0, array.length);
System.arraycopy(values, 0, rval, array.length, values.length);
return rval;
}
}