JAL-3949 An attempt at converting to Log4j 2 -- no output achieved!
[jalview.git] / src / jalview / log / JalviewAppender.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.log;
22
23 import java.io.Serializable;
24 import java.nio.charset.StandardCharsets;
25
26 import javax.swing.JTextArea;
27 import javax.swing.SwingUtilities;
28
29 import org.apache.logging.log4j.Level;
30 import org.apache.logging.log4j.core.Filter;
31 import org.apache.logging.log4j.core.Layout;
32 import org.apache.logging.log4j.core.LogEvent;
33 import org.apache.logging.log4j.core.appender.AbstractAppender;
34 import org.apache.logging.log4j.core.config.Property;
35
36 import jalview.log.JLoggerI.LogLevel;
37 import jalview.util.Log4j;
38
39 /**
40  * From http://textareaappender.zcage.com/ the means to capture the logs, too.
41  * Simple example of creating a Log4j appender that will write to a JTextArea.
42  */
43 public class JalviewAppender extends AbstractAppender
44 {
45   public final static String NAME = "JalviewAppender";
46
47   public JalviewAppender()
48   {
49     this(LogLevel.INFO);
50   }
51
52   public JalviewAppender(LogLevel loglevel)
53   {
54     super(NAME,
55             Log4j.getThresholdFilter(loglevel == null ? Level.INFO
56                     : Log4j.log4jLevel(loglevel)),
57             Log4j.getSimpleLayout(), false, new Property[0]);
58   }
59
60   protected JalviewAppender(String name, Filter filter,
61           Layout<? extends Serializable> layout, boolean ignoreExceptions,
62           Property[] properties)
63   {
64     super(name, filter, layout, ignoreExceptions, properties);
65     // TODO Auto-generated constructor stub
66   }
67
68   static private JTextArea jTextArea = null;
69
70   /** Set the target JTextArea for the logging information to appear. */
71   static public void setTextArea(JTextArea jTextArea)
72   {
73     JalviewAppender.jTextArea = jTextArea;
74   }
75
76   /**
77    * Format and then append the loggingEvent to the stored JTextArea.
78    */
79   public void append(LogEvent logEvent)
80   {
81     final String message = new String(
82             this.getLayout().toByteArray(logEvent), StandardCharsets.UTF_8);
83
84     // Append formatted message to textarea using the Swing Thread.
85     SwingUtilities.invokeLater(new Runnable()
86     {
87       public void run()
88       {
89         if (jTextArea != null)
90         {
91           jTextArea.append(message);
92         }
93       }
94     });
95   }
96 }