Skip to content

Commit a2d7e31

Browse files
ricardojlrufinoFederico Fissore
authored andcommitted
Allow redirect logs to console
1 parent 50f2687 commit a2d7e31

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
@@ -55,11 +55,15 @@
5555
import processing.app.tools.ZipDeflater;
5656

5757
import javax.swing.*;
58+
5859
import java.awt.*;
5960
import java.awt.event.*;
6061
import java.io.*;
6162
import java.util.*;
6263
import java.util.List;
64+
import java.util.logging.Handler;
65+
import java.util.logging.Level;
66+
import java.util.logging.Logger;
6367

6468
import static processing.app.I18n._;
6569

@@ -134,6 +138,8 @@ static public void guardedMain(String args[]) throws Exception {
134138

135139
BaseNoGui.initLogger();
136140

141+
initLogger();
142+
137143
BaseNoGui.notifier = new GUIUserNotifier();
138144

139145
initPlatform();
@@ -212,6 +218,34 @@ static public void guardedMain(String args[]) throws Exception {
212218
INSTANCE = new Base(args);
213219
}
214220

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

216250
static protected void setCommandLine() {
217251
commandLine = true;
@@ -2083,6 +2117,14 @@ static public void setIcon(Frame frame) {
20832117
// don't use the low-res icon on Mac OS X; the window should
20842118
// already have the right icon from the .app file.
20852119
if (OSUtils.isMacOS()) return;
2120+
2121+
// don't use the low-res icon on Linux
2122+
if (OSUtils.isLinux()){
2123+
String current = System.getProperty("user.dir");
2124+
Image image = Toolkit.getDefaultToolkit().createImage(current + "/lib/arduino.png");
2125+
frame.setIconImage(image);
2126+
return;
2127+
}
20862128

20872129
Image image = Toolkit.getDefaultToolkit().createImage(PApplet.ICON_IMAGE);
20882130
frame.setIconImage(image);
@@ -2137,7 +2179,12 @@ static public void showReference(String prefix, String filename) {
21372179
File referenceFile = new File(referenceFolder, filename);
21382180
if (!referenceFile.exists())
21392181
referenceFile = new File(referenceFolder, filename + ".html");
2140-
openURL(referenceFile.getAbsolutePath());
2182+
2183+
if(referenceFile.exists()){
2184+
openURL(referenceFile.getAbsolutePath());
2185+
}else{
2186+
showWarning(_("Problem Opening URL"), I18n.format(_("Could not open the URL\n{0}"), referenceFile), null);
2187+
}
21412188
}
21422189

21432190
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)