Lines 20-32
package org.apache.jmeter.gui;
Link Here
|
20 |
|
20 |
|
21 |
import java.awt.BorderLayout; |
21 |
import java.awt.BorderLayout; |
22 |
import java.awt.Insets; |
22 |
import java.awt.Insets; |
|
|
23 |
import java.util.Iterator; |
23 |
|
24 |
|
24 |
import javax.swing.JPanel; |
25 |
import javax.swing.JPanel; |
25 |
import javax.swing.JScrollPane; |
26 |
import javax.swing.JScrollPane; |
26 |
import javax.swing.JTextArea; |
27 |
import javax.swing.JTextArea; |
27 |
import javax.swing.ScrollPaneConstants; |
28 |
import javax.swing.ScrollPaneConstants; |
28 |
import javax.swing.SwingUtilities; |
29 |
import javax.swing.SwingUtilities; |
|
|
30 |
import javax.swing.Timer; |
29 |
|
31 |
|
|
|
32 |
import org.apache.commons.collections.buffer.BoundedFifoBuffer; |
30 |
import org.apache.jmeter.gui.util.JSyntaxTextArea; |
33 |
import org.apache.jmeter.gui.util.JSyntaxTextArea; |
31 |
import org.apache.jmeter.gui.util.JTextScrollPane; |
34 |
import org.apache.jmeter.gui.util.JTextScrollPane; |
32 |
import org.apache.jmeter.util.JMeterUtils; |
35 |
import org.apache.jmeter.util.JMeterUtils; |
Lines 45-56
public class LoggerPanel extends JPanel implements LogTarget {
Link Here
|
45 |
|
48 |
|
46 |
private final JTextArea textArea; |
49 |
private final JTextArea textArea; |
47 |
|
50 |
|
|
|
51 |
private final BoundedFifoBuffer events = |
52 |
new BoundedFifoBuffer(JMeterUtils.getPropDefault("jmeter.loggerpanel.maxlength", 1000)); // $NON-NLS-1$ |
53 |
|
54 |
private Timer timer; |
55 |
|
56 |
private volatile boolean logChanged = false; |
57 |
|
48 |
private final PatternFormatter format; |
58 |
private final PatternFormatter format; |
49 |
|
59 |
|
50 |
// Limit length of log content |
60 |
// Limit length of log content |
51 |
private static final int LOGGER_PANEL_MAX_LENGTH = |
61 |
private static final int LOGGER_PANEL_MAX_LENGTH = |
52 |
JMeterUtils.getPropDefault("jmeter.loggerpanel.maxlength", 80000); // $NON-NLS-1$ |
62 |
JMeterUtils.getPropDefault("jmeter.loggerpanel.maxlength", 80000); // $NON-NLS-1$ |
53 |
|
63 |
|
54 |
// Make panel handle event even if closed |
64 |
// Make panel handle event even if closed |
55 |
private static final boolean LOGGER_PANEL_RECEIVE_WHEN_CLOSED = |
65 |
private static final boolean LOGGER_PANEL_RECEIVE_WHEN_CLOSED = |
56 |
JMeterUtils.getPropDefault("jmeter.loggerpanel.enable_when_closed", true); // $NON-NLS-1$ |
66 |
JMeterUtils.getPropDefault("jmeter.loggerpanel.enable_when_closed", true); // $NON-NLS-1$ |
Lines 89-94
public class LoggerPanel extends JPanel implements LogTarget {
Link Here
|
89 |
areaScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); |
99 |
areaScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); |
90 |
areaScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); |
100 |
areaScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); |
91 |
this.add(areaScrollPane, BorderLayout.CENTER); |
101 |
this.add(areaScrollPane, BorderLayout.CENTER); |
|
|
102 |
|
103 |
initWorker(); |
104 |
|
92 |
return jTextArea; |
105 |
return jTextArea; |
93 |
} |
106 |
} |
94 |
|
107 |
|
Lines 100-121
public class LoggerPanel extends JPanel implements LogTarget {
Link Here
|
100 |
if(!LOGGER_PANEL_RECEIVE_WHEN_CLOSED && !GuiPackage.getInstance().getMenuItemLoggerPanel().getModel().isSelected()) { |
113 |
if(!LOGGER_PANEL_RECEIVE_WHEN_CLOSED && !GuiPackage.getInstance().getMenuItemLoggerPanel().getModel().isSelected()) { |
101 |
return; |
114 |
return; |
102 |
} |
115 |
} |
103 |
|
116 |
|
104 |
SwingUtilities.invokeLater(new Runnable() { |
117 |
synchronized (events) { |
105 |
@Override |
118 |
if (events.isFull()) { |
106 |
public void run() { |
119 |
events.remove(); |
107 |
synchronized (textArea) { |
120 |
} |
108 |
textArea.append(format.format(logEvent)); |
121 |
events.add(format.format(logEvent)); |
109 |
int currentLength = textArea.getText().length(); |
122 |
} |
110 |
// If LOGGER_PANEL_MAX_LENGTH is 0, it means all log events are kept |
123 |
|
111 |
if(LOGGER_PANEL_MAX_LENGTH != 0 && currentLength> LOGGER_PANEL_MAX_LENGTH) { |
124 |
logChanged = true; |
112 |
textArea.setText(textArea.getText().substring(Math.max(0, currentLength-LOGGER_PANEL_MAX_LENGTH), |
125 |
} |
113 |
currentLength)); |
126 |
|
|
|
127 |
private void initWorker() { |
128 |
timer = new Timer( |
129 |
100, |
130 |
e -> { |
131 |
if (logChanged) { |
132 |
logChanged = false; |
133 |
StringBuilder builder = new StringBuilder(); |
134 |
synchronized (events) { |
135 |
Iterator<String> lines = events.iterator(); |
136 |
while (lines.hasNext()) { |
137 |
builder.append(lines.next()); |
138 |
} |
139 |
} |
140 |
String logText = builder.toString(); |
141 |
synchronized (textArea) { |
142 |
textArea.setText(logText); |
143 |
int currentLength = logText.length(); |
144 |
textArea.setCaretPosition(logText.length()); |
114 |
} |
145 |
} |
115 |
textArea.setCaretPosition(textArea.getText().length()); |
|
|
116 |
} |
146 |
} |
117 |
} |
147 |
} |
118 |
}); |
148 |
); |
|
|
149 |
timer.start(); |
119 |
} |
150 |
} |
120 |
|
151 |
|
121 |
/** |
152 |
/** |
Lines 123-127
public class LoggerPanel extends JPanel implements LogTarget {
Link Here
|
123 |
*/ |
154 |
*/ |
124 |
public void clear() { |
155 |
public void clear() { |
125 |
this.textArea.setText(""); // $NON-NLS-1$ |
156 |
this.textArea.setText(""); // $NON-NLS-1$ |
|
|
157 |
events.clear(); |
126 |
} |
158 |
} |
127 |
} |
159 |
} |