Skip to content

Commit

Permalink
added Open Log File Location
Browse files Browse the repository at this point in the history
  • Loading branch information
i-make-robots committed Dec 23, 2023
1 parent 422f294 commit c34fb7e
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ public class AddNode<T extends Node> extends AbstractAction {

public AddNode(NodeTreeView treeView) {
super();
this.treeView = treeView;
putValue(Action.NAME,"Add");
putValue(SMALL_ICON,new ImageIcon(Objects.requireNonNull(getClass().getResource("icons8-add-16.png"))));
putValue(SHORT_DESCRIPTION,"Add a new instance of a Node to every selected branches of the tree.");
this.treeView = treeView;
}

/**
Expand Down
24 changes: 20 additions & 4 deletions src/main/java/com/marginallyclever/ro3/apps/logpanel/LogPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,57 @@

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.FileAppender;
import com.marginallyclever.ro3.apps.DockingPanel;
import org.slf4j.LoggerFactory;

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.lang.module.Configuration;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.Locale;
import java.util.Objects;
import java.util.Properties;

/**
* {@link LogPanel} is a read-only panel that contains the log. It cannot be derived from {@link DockingPanel}
* because it is created before {@link ModernDocking.app.Docking} is initialized.
*/
public class LogPanel extends JPanel {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(LogPanel.class);
private final JTextArea logArea = new JTextArea();

public LogPanel() {
super(new BorderLayout());

JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
toolbar.add(new JButton(new OpenLogFileLocation()));
add(toolbar, BorderLayout.NORTH);

logArea.setEditable(false);
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(logArea);
add(scroll, BorderLayout.CENTER);

// append log events to this panel
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
LogPanelAppender appender = new LogPanelAppender(this);
appender.setContext(lc);
logger.addAppender(appender);
rootLogger.addAppender(appender);
appender.start();

reportSystemInfo(logger);
reportSystemInfo();
}

private void reportSystemInfo(Logger logger) {
private void reportSystemInfo() {
logger.info("------------------------------------------------");
Properties p = System.getProperties();
for(String n : p.stringPropertyNames()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.marginallyclever.ro3.apps.logpanel;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.FileAppender;
import org.slf4j.LoggerFactory;

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Objects;

public class OpenLogFileLocation extends AbstractAction {
private final org.slf4j.Logger logger = LoggerFactory.getLogger(OpenLogFileLocation.class);

public OpenLogFileLocation() {
super();
putValue(Action.NAME,"Open Log File Location");
putValue(Action.SMALL_ICON,new ImageIcon(Objects.requireNonNull(getClass().getResource("icons8-folder-16.png"))));
putValue(Action.SHORT_DESCRIPTION,"Open the folder containing the log file.");
}

@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
String logFileName = getLogFile();
if(logFileName==null) {
logger.error("Failed to find log file.");
return;
}

logger.debug("Opening log file location: "+logFileName);
try {
File file = new File(logFileName);
String absolutePath = file.getAbsolutePath();
File parentDirectory = new File(absolutePath).getParentFile();
Desktop.getDesktop().open(parentDirectory);
} catch(IOException ex) {
logger.error("Failed to open log file location.",ex);
}
}

private String getLogFile() {
Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);

for (Iterator<Appender<ILoggingEvent>> it = logger.iteratorForAppenders(); it.hasNext(); ) {
Appender<ILoggingEvent> appender = it.next();
if (appender instanceof FileAppender<ILoggingEvent>) {
FileAppender<?> fileAppender = (FileAppender<?>) appender;
return fileAppender.getFile();
}
}
return null;
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit c34fb7e

Please sign in to comment.