1 package cz.cuni.amis.pogamut.base.utils.logging;
2
3 import java.util.HashSet;
4 import java.util.Set;
5 import java.util.logging.Filter;
6 import java.util.logging.LogRecord;
7
8
9
10
11
12
13
14 public class LogCategoryFilter implements Filter {
15
16 private interface Filter {
17 public boolean isLoggable(LogRecord record);
18 }
19
20 private class LogSingleCategoryFilter implements Filter {
21
22 public boolean isLoggable(LogRecord record) {
23 return record.getParameters() != null && record.getParameters().length > 0 && record.getParameters()[0] == category;
24 }
25
26 }
27
28 private class LogMultipleCategoriesFilter implements Filter {
29
30 public boolean isLoggable(LogRecord record) {
31 return record.getParameters() != null && record.getParameters().length > 0 && categories.contains(record.getParameters()[0]);
32 }
33
34 }
35
36 private LogCategory category = null;
37
38 private Filter filter;
39
40 private Set<LogCategory> categories = null;
41
42 public LogCategoryFilter(LogCategory category) {
43 this.category = category;
44 filter = new LogSingleCategoryFilter();
45 }
46
47 public LogCategoryFilter(LogCategory[] categories) {
48 this.categories = new HashSet<LogCategory>();
49 for (LogCategory category : categories) {
50 this.categories.add(category);
51 }
52 filter = new LogMultipleCategoriesFilter();
53 }
54
55 @Override
56 public boolean isLoggable(LogRecord record) {
57 return filter.isLoggable(record);
58 }
59
60
61
62
63
64
65
66
67 public LogCategory[] getFilterCategories() {
68 if (category != null) return new LogCategory[]{category};
69 return categories.toArray(new LogCategory[categories.size()]);
70 }
71
72 }