Skip to content

Commit 63f153c

Browse files
ricardojlrufinoFederico Fissore
authored and
Federico Fissore
committed
Allow redirect logs to console
1 parent ff49809 commit 63f153c

File tree

3 files changed

+127
-1
lines changed

3 files changed

+127
-1
lines changed

app/src/processing/app/Base.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,15 @@
5757
import processing.app.tools.ZipDeflater;
5858

5959
import javax.swing.*;
60+
6061
import java.awt.*;
6162
import java.awt.event.*;
6263
import java.io.*;
6364
import java.util.*;
6465
import java.util.List;
66+
import java.util.logging.Handler;
67+
import java.util.logging.Level;
68+
import java.util.logging.Logger;
6569

6670
import static processing.app.I18n._;
6771

@@ -137,6 +141,8 @@ static public void guardedMain(String args[]) throws Exception {
137141

138142
BaseNoGui.initLogger();
139143

144+
initLogger();
145+
140146
BaseNoGui.notifier = new GUIUserNotifier();
141147

142148
initPlatform();
@@ -215,6 +221,34 @@ static public void guardedMain(String args[]) throws Exception {
215221
INSTANCE = new Base(args);
216222
}
217223

224+
225+
static public void initLogger() {
226+
Handler consoleHandler = new ConsoleLogger();
227+
consoleHandler.setLevel(Level.ALL);
228+
consoleHandler.setFormatter(new LogFormatter("%1$tl:%1$tM:%1$tS [%4$7s] %2$s: %5$s%n"));
229+
230+
Logger globalLogger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
231+
globalLogger.setLevel(consoleHandler.getLevel());
232+
233+
// Remove default
234+
Handler[] handlers = globalLogger.getHandlers();
235+
for(Handler handler : handlers) {
236+
globalLogger.removeHandler(handler);
237+
}
238+
Logger root = Logger.getLogger("");
239+
handlers = root.getHandlers();
240+
for(Handler handler : handlers) {
241+
root.removeHandler(handler);
242+
}
243+
244+
globalLogger.addHandler(consoleHandler);
245+
246+
Logger.getLogger("cc.arduino.packages.autocomplete").setParent(globalLogger);
247+
Logger.getLogger("br.com.criativasoft.cpluslibparser").setParent(globalLogger);
248+
Logger.getLogger(Base.class.getPackage().getName()).setParent(globalLogger);
249+
250+
}
251+
218252

219253
static protected void setCommandLine() {
220254
commandLine = true;
@@ -2098,6 +2132,14 @@ static public void setIcon(Frame frame) {
20982132
// don't use the low-res icon on Mac OS X; the window should
20992133
// already have the right icon from the .app file.
21002134
if (OSUtils.isMacOS()) return;
2135+
2136+
// don't use the low-res icon on Linux
2137+
if (OSUtils.isLinux()){
2138+
String current = System.getProperty("user.dir");
2139+
Image image = Toolkit.getDefaultToolkit().createImage(current + "/lib/arduino.png");
2140+
frame.setIconImage(image);
2141+
return;
2142+
}
21012143

21022144
Image image = Toolkit.getDefaultToolkit().createImage(PApplet.ICON_IMAGE);
21032145
frame.setIconImage(image);
@@ -2152,7 +2194,12 @@ static public void showReference(String prefix, String filename) {
21522194
File referenceFile = new File(referenceFolder, filename);
21532195
if (!referenceFile.exists())
21542196
referenceFile = new File(referenceFolder, filename + ".html");
2155-
openURL(referenceFile.getAbsolutePath());
2197+
2198+
if(referenceFile.exists()){
2199+
openURL(referenceFile.getAbsolutePath());
2200+
}else{
2201+
showWarning(_("Problem Opening URL"), I18n.format(_("Could not open the URL\n{0}"), referenceFile), null);
2202+
}
21562203
}
21572204

21582205
public static void showEdisonGettingStarted() {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package processing.app.helpers;
2+
3+
import java.io.FileDescriptor;
4+
import java.io.FileOutputStream;
5+
import java.io.PrintStream;
6+
import java.util.logging.LogRecord;
7+
import java.util.logging.StreamHandler;
8+
9+
public class ConsoleLogger extends StreamHandler {
10+
11+
public ConsoleLogger() {
12+
setOutputStream(new PrintStream(new FileOutputStream(FileDescriptor.out)));
13+
}
14+
15+
16+
public void publish(LogRecord record) {
17+
super.publish(record);
18+
flush();
19+
}
20+
21+
/**
22+
* Override <tt>StreamHandler.close</tt> to do a flush but not
23+
* to close the output stream. That is, we do <b>not</b>
24+
* close <tt>FileDescriptor.out</tt>.
25+
*/
26+
public void close() {
27+
flush();
28+
}
29+
30+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package processing.app.helpers;
2+
3+
import java.io.PrintWriter;
4+
import java.io.StringWriter;
5+
import java.util.Date;
6+
import java.util.logging.Formatter;
7+
import java.util.logging.LogRecord;
8+
9+
public class LogFormatter extends Formatter {
10+
11+
public String format;
12+
private final Date dat = new Date();
13+
14+
public LogFormatter(String logformat) {
15+
format = logformat;
16+
}
17+
18+
@Override
19+
public String format(LogRecord record) {
20+
dat.setTime(record.getMillis());
21+
String source;
22+
if (record.getSourceClassName() != null) {
23+
source = record.getSourceClassName().substring(record.getSourceClassName().lastIndexOf('.') + 1);
24+
if (record.getSourceMethodName() != null) {
25+
source += "." + record.getSourceMethodName();
26+
}
27+
} else {
28+
source = record.getLoggerName();
29+
}
30+
String message = formatMessage(record);
31+
String throwable = "";
32+
if (record.getThrown() != null) {
33+
StringWriter sw = new StringWriter();
34+
PrintWriter pw = new PrintWriter(sw);
35+
pw.println();
36+
record.getThrown().printStackTrace(pw);
37+
pw.close();
38+
throwable = sw.toString();
39+
}
40+
return String.format(format,
41+
dat,
42+
source,
43+
record.getLoggerName(),
44+
record.getLevel(),
45+
message,
46+
throwable);
47+
}
48+
49+
}

0 commit comments

Comments
 (0)