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 java.util.Iterator;
20
21 import org.apache.logging.log4j.core.AbstractLifeCycle;
22 import org.apache.logging.log4j.core.Filter;
23 import org.apache.logging.log4j.core.LogEvent;
24
25
26
27
28 public abstract class AbstractFilterable extends AbstractLifeCycle implements Filterable {
29
30 private static final long serialVersionUID = 1L;
31
32
33
34
35 private volatile Filter filter;
36
37 protected AbstractFilterable(final Filter filter) {
38 this.filter = filter;
39 }
40
41 protected AbstractFilterable() {
42 }
43
44
45
46
47
48 @Override
49 public Filter getFilter() {
50 return filter;
51 }
52
53
54
55
56
57 @Override
58 public synchronized void addFilter(final Filter filter) {
59 if (this.filter == null) {
60 this.filter = filter;
61 } else if (filter instanceof CompositeFilter) {
62 this.filter = ((CompositeFilter) this.filter).addFilter(filter);
63 } else {
64 final Filter[] filters = new Filter[] {this.filter, filter};
65 this.filter = CompositeFilter.createFilters(filters);
66 }
67 }
68
69
70
71
72
73 @Override
74 public synchronized void removeFilter(final Filter filter) {
75 if (this.filter == filter) {
76 this.filter = null;
77 } else if (filter instanceof CompositeFilter) {
78 CompositeFilter composite = (CompositeFilter) filter;
79 composite = composite.removeFilter(filter);
80 if (composite.size() > 1) {
81 this.filter = composite;
82 } else if (composite.size() == 1) {
83 final Iterator<Filter> iter = composite.iterator();
84 this.filter = iter.next();
85 } else {
86 this.filter = null;
87 }
88 }
89 }
90
91
92
93
94
95 @Override
96 public boolean hasFilter() {
97 return filter != null;
98 }
99
100
101
102
103 @Override
104 public void start() {
105 this.setStarting();
106 if (filter != null) {
107 filter.start();
108 }
109 this.setStarted();
110 }
111
112
113
114
115 @Override
116 public void stop() {
117 this.setStopping();
118 if (filter != null) {
119 filter.stop();
120 }
121 this.setStopped();
122 }
123
124
125
126
127
128
129 @Override
130 public boolean isFiltered(final LogEvent event) {
131 return filter != null && filter.filter(event) == Filter.Result.DENY;
132 }
133
134 }