View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements. See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache license, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License. You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the license for the specific language governing permissions and
15   * limitations under the license.
16   */
17  package org.apache.log4j.bridge;
18  
19  import java.io.Serializable;
20  import java.util.ArrayList;
21  import java.util.List;
22  
23  import org.apache.log4j.Appender;
24  import org.apache.logging.log4j.core.Filter;
25  import org.apache.logging.log4j.core.Layout;
26  import org.apache.logging.log4j.core.LogEvent;
27  import org.apache.logging.log4j.core.appender.AbstractAppender;
28  import org.apache.logging.log4j.core.config.Property;
29  import org.apache.logging.log4j.core.filter.CompositeFilter;
30  
31  /**
32   * Binds a Log4j 1.x Appender to Log4j 2.
33   */
34  public class AppenderAdapter {
35  
36      private final Appender appender;
37      private final Adapter adapter;
38  
39      /**
40       * Constructor.
41       * @param appender The Appender to wrap.
42       */
43      public AppenderAdapter(Appender appender) {
44          this.appender = appender;
45          org.apache.logging.log4j.core.Filter appenderFilter = null;
46          if (appender.getFilter() != null) {
47              if (appender.getFilter().getNext() != null) {
48                  org.apache.log4j.spi.Filter filter = appender.getFilter();
49                  List<org.apache.logging.log4j.core.Filter> filters = new ArrayList<>();
50                  while (filter != null) {
51                      filters.add(new FilterAdapter(filter));
52                      filter = filter.getNext();
53                  }
54                  appenderFilter = CompositeFilter.createFilters(filters.toArray(new Filter[0]));
55              } else {
56                  appenderFilter = new FilterAdapter(appender.getFilter());
57              }
58          }
59          this.adapter = new Adapter(appender.getName(), appenderFilter, null, true, null);
60      }
61  
62      public Adapter getAdapter() {
63          return adapter;
64      }
65  
66      public class Adapter extends AbstractAppender {
67  
68          protected Adapter(final String name, final Filter filter, final Layout<? extends Serializable> layout,
69              final boolean ignoreExceptions, final Property[] properties) {
70              super(name, filter, layout, ignoreExceptions, properties);
71          }
72  
73          @Override
74          public void append(LogEvent event) {
75              appender.doAppend(new LogEventAdapter(event));
76          }
77  
78          @Override
79          public void stop() {
80              appender.close();
81          }
82  
83          public Appender getAppender() {
84              return appender;
85          }
86      }
87  }