1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.filter;
18
19 import org.apache.logging.log4j.core.Filter;
20 import org.apache.logging.log4j.core.LifeCycle;
21 import org.apache.logging.log4j.core.LogEvent;
22
23 import java.util.Iterator;
24
25
26
27
28 public abstract class AbstractFilterable implements Filterable {
29
30 private volatile Filter filter;
31
32 protected AbstractFilterable(final Filter filter) {
33 this.filter = filter;
34 }
35
36 protected AbstractFilterable() {
37 }
38
39
40
41
42
43 public Filter getFilter() {
44 return filter;
45 }
46
47
48
49
50
51 public synchronized void addFilter(final Filter filter) {
52 if (this.filter == null) {
53 this.filter = filter;
54 } else if (filter instanceof CompositeFilter) {
55 this.filter = ((CompositeFilter) this.filter).addFilter(filter);
56 } else {
57 final Filter[] filters = new Filter[] {this.filter, filter};
58 this.filter = CompositeFilter.createFilters(filters);
59 }
60 }
61
62
63
64
65
66 public synchronized void removeFilter(final Filter filter) {
67 if (this.filter == filter) {
68 this.filter = null;
69 } else if (filter instanceof CompositeFilter) {
70 CompositeFilter composite = (CompositeFilter) filter;
71 composite = composite.removeFilter(filter);
72 if (composite.size() > 1) {
73 this.filter = composite;
74 } else if (composite.size() == 1) {
75 final Iterator<Filter> iter = composite.iterator();
76 this.filter = iter.next();
77 } else {
78 this.filter = null;
79 }
80 }
81 }
82
83
84
85
86
87 public boolean hasFilter() {
88 return filter != null;
89 }
90
91
92
93
94 public void startFilter() {
95 if (filter != null && filter instanceof LifeCycle) {
96 ((LifeCycle) filter).start();
97 }
98 }
99
100
101
102
103 public void stopFilter() {
104 if (filter != null && filter instanceof LifeCycle) {
105 ((LifeCycle) filter).stop();
106 }
107 }
108
109
110
111
112
113
114 public boolean isFiltered(final LogEvent event) {
115 return filter != null && filter.filter(event) == Filter.Result.DENY;
116 }
117
118 }