001/* 002 * Stallion Core: A Modern Web Framework 003 * 004 * Copyright (C) 2015 - 2016 Stallion Software LLC. 005 * 006 * This program is free software: you can redistribute it and/or modify it under the terms of the 007 * GNU General Public License as published by the Free Software Foundation, either version 2 of 008 * the License, or (at your option) any later version. This program is distributed in the hope that 009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 011 * License for more details. You should have received a copy of the GNU General Public License 012 * along with this program. If not, see <http://www.gnu.org/licenses/gpl-2.0.html>. 013 * 014 * 015 * 016 */ 017 018package io.stallion.services; 019 020import org.apache.commons.lang3.ArrayUtils; 021 022import java.util.HashMap; 023import java.util.Map; 024import java.util.logging.Filter; 025import java.util.logging.Level; 026import java.util.logging.LogRecord; 027 028import static io.stallion.utils.Literals.*; 029 030 031public class LogFilter implements Filter { 032 private Map<String, Level> packageLogLevelMap = new HashMap<>(); 033 private Level defaultLevel = Level.INFO; 034 035 public LogFilter(Level defaultLevel, Map<String, String> packageLogLevelMap) { 036 for(Map.Entry<String, String> entry: packageLogLevelMap.entrySet()) { 037 String packageName = entry.getKey().replace("io.stallion", "."); 038 this.packageLogLevelMap.put(packageName, Level.parse(entry.getValue().toUpperCase())); 039 } 040 this.defaultLevel = defaultLevel; 041 } 042 043 @Override 044 public boolean isLoggable(LogRecord record) { 045 Level overrideLevel = packageLogLevelMap.getOrDefault(toPackageName(record), null); 046 if (overrideLevel != null) { 047 if (record.getLevel().intValue() >= overrideLevel.intValue()) { 048 return true; 049 } else { 050 return false; 051 } 052 } 053 return record.getLevel().intValue() >= defaultLevel.intValue(); 054 } 055 056 private String toPackageName(LogRecord record) { 057 int i = record.getSourceClassName().lastIndexOf("."); 058 if (i == -1) { 059 return ""; 060 } 061 return record.getSourceClassName().substring(0, i); 062 } 063}