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