You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2019/04/07 12:30:56 UTC
[lucene-solr] 16/34: Change logging a bit: do textarea update async;
fix locking; centralize name of log file
This is an automated email from the ASF dual-hosted git repository.
uschindler pushed a commit to branch jira/lucene-2562-luke-swing-3
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 347095128ba9856f5b907fc5f5c5f7f377c81a4e
Author: Uwe Schindler <us...@apache.org>
AuthorDate: Fri Apr 5 18:11:16 2019 +0200
Change logging a bit: do textarea update async; fix locking; centralize name of log file
---
.../apache/lucene/luke/app/desktop/LukeMain.java | 10 +++++--
.../app/desktop/components/LogsPanelProvider.java | 8 ++---
.../luke/app/desktop/util/TextAreaAppender.java | 35 ++++++++++++++--------
.../org/apache/lucene/luke/util/LoggerFactory.java | 7 +++--
4 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/LukeMain.java b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/LukeMain.java
index 673127d..fae52f2 100644
--- a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/LukeMain.java
+++ b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/LukeMain.java
@@ -22,6 +22,7 @@ import javax.swing.UIManager;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
+import java.nio.file.FileSystems;
import org.apache.logging.log4j.Logger;
import org.apache.lucene.luke.app.desktop.components.LukeWindowProvider;
@@ -36,11 +37,15 @@ import static org.apache.lucene.luke.app.desktop.util.ExceptionHandler.handle;
/** Entry class for desktop Luke */
public class LukeMain {
+ public static final String LOG_FILE = System.getProperty("user.home") +
+ FileSystems.getDefault().getSeparator() + ".luke.d" +
+ FileSystems.getDefault().getSeparator() + "luke.log";
+
static {
- LoggerFactory.initGuiLogging();
+ LoggerFactory.initGuiLogging(LOG_FILE);
}
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
+
private static JFrame frame;
public static JFrame getOwnerFrame() {
@@ -48,7 +53,6 @@ public class LukeMain {
}
private static void createAndShowGUI() {
-
// uncaught error handler
MessageBroker messageBroker = MessageBroker.getInstance();
Thread.setDefaultUncaughtExceptionHandler((thread, cause) ->
diff --git a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/components/LogsPanelProvider.java b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/components/LogsPanelProvider.java
index 2cf385f..1d27cea 100644
--- a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/components/LogsPanelProvider.java
+++ b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/components/LogsPanelProvider.java
@@ -24,17 +24,13 @@ import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
-import java.nio.file.FileSystems;
+import org.apache.lucene.luke.app.desktop.LukeMain;
import org.apache.lucene.luke.app.desktop.util.MessageUtils;
/** Provider of the Logs panel */
public final class LogsPanelProvider {
- private static final String LOG_FILE = System.getProperty("user.home") +
- FileSystems.getDefault().getSeparator() + ".luke.d" +
- FileSystems.getDefault().getSeparator() + "luke.log";
-
private final JTextArea logTextArea;
public LogsPanelProvider(JTextArea logTextArea) {
@@ -50,7 +46,7 @@ public final class LogsPanelProvider {
header.setOpaque(false);
header.add(new JLabel(MessageUtils.getLocalizedMessage("logs.label.see_also")));
- JLabel logPathLabel = new JLabel(LOG_FILE);
+ JLabel logPathLabel = new JLabel(LukeMain.LOG_FILE);
header.add(logPathLabel);
panel.add(header, BorderLayout.PAGE_START);
diff --git a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/util/TextAreaAppender.java b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/util/TextAreaAppender.java
index b577b67..41cab03 100644
--- a/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/util/TextAreaAppender.java
+++ b/lucene/luke/src/java/org/apache/lucene/luke/app/desktop/util/TextAreaAppender.java
@@ -18,8 +18,9 @@
package org.apache.lucene.luke.app.desktop.util;
import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
import java.io.Serializable;
-import java.nio.charset.StandardCharsets;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -28,6 +29,7 @@ import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Core;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.StringLayout;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender;
import org.apache.logging.log4j.core.config.Property;
@@ -40,8 +42,9 @@ public final class TextAreaAppender extends AbstractAppender {
private static JTextArea textArea;
- private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
- private final Lock readLock = rwLock.readLock();
+ private static final ReadWriteLock rwLock = new ReentrantReadWriteLock();
+ private static final Lock readLock = rwLock.readLock();
+ private static final Lock writeLock = rwLock.writeLock();
protected TextAreaAppender(String name, Filter filter,
org.apache.logging.log4j.core.Layout<? extends Serializable> layout, final boolean ignoreExceptions) {
@@ -49,22 +52,30 @@ public final class TextAreaAppender extends AbstractAppender {
}
public static void setTextArea(JTextArea ta) {
- if (textArea != null) {
- throw new IllegalStateException("TextArea already set.");
+ writeLock.lock();
+ try {
+ if (textArea != null) {
+ throw new IllegalStateException("TextArea already set.");
+ }
+ textArea = ta;
+ } finally {
+ writeLock.unlock();
}
- textArea = ta;
}
@Override
public void append(LogEvent event) {
- if (textArea == null) {
- throw new IllegalStateException();
- }
-
readLock.lock();
try {
- String message = new String(getLayout().toByteArray(event), StandardCharsets.UTF_8);
- textArea.append(message);
+ if (textArea == null) {
+ // just ignore any events logged before the area is available
+ return;
+ }
+
+ final String message = ((StringLayout) getLayout()).toSerializable(event);
+ SwingUtilities.invokeLater(() -> {
+ textArea.append(message);
+ });
} finally {
readLock.unlock();
}
diff --git a/lucene/luke/src/java/org/apache/lucene/luke/util/LoggerFactory.java b/lucene/luke/src/java/org/apache/lucene/luke/util/LoggerFactory.java
index 4a383b1..c98d552 100644
--- a/lucene/luke/src/java/org/apache/lucene/luke/util/LoggerFactory.java
+++ b/lucene/luke/src/java/org/apache/lucene/luke/util/LoggerFactory.java
@@ -17,6 +17,8 @@
package org.apache.lucene.luke.util;
+import java.nio.charset.StandardCharsets;
+
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
@@ -35,19 +37,20 @@ import org.apache.lucene.luke.app.desktop.util.TextAreaAppender;
*/
public class LoggerFactory {
- public static void initGuiLogging() {
+ public static void initGuiLogging(String logFile) {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.add(builder.newRootLogger(Level.INFO));
LoggerContext context = Configurator.initialize(builder.build());
PatternLayout layout = PatternLayout.newBuilder()
.withPattern("[%d{ISO8601}] %5p (%F:%L) - %m%n")
+ .withCharset(StandardCharsets.UTF_8)
.build();
Appender fileAppender = FileAppender.newBuilder()
.setName("File")
.setLayout(layout)
- .withFileName(System.getProperty("user.home") + "/.luke.d/luke.log")
+ .withFileName(logFile)
.withAppend(false)
.build();
fileAppender.start();