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