From 3d3cb7bb86b92f1c4eec8b9cd558641e48257dbd Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 24 May 2015 21:51:37 +0200 Subject: [PATCH] Writing logfiles now. --- main/installer-linux/pom.xml | 4 +- main/installer-osx/pom.xml | 4 +- main/installer-win-portable/pom.xml | 1 + main/installer-win/pom.xml | 4 +- .../HomeDirectoryAwareFileAppender.java | 82 +++++++++++++++++++ main/ui/src/main/resources/log4j2.xml | 12 ++- 6 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 main/ui/src/main/java/org/cryptomator/ui/logging/HomeDirectoryAwareFileAppender.java diff --git a/main/installer-linux/pom.xml b/main/installer-linux/pom.xml index 8ee11dd09..b0595a4ad 100644 --- a/main/installer-linux/pom.xml +++ b/main/installer-linux/pom.xml @@ -41,7 +41,9 @@ - + + + diff --git a/main/installer-osx/pom.xml b/main/installer-osx/pom.xml index 0dc90b1c4..a5acf4766 100644 --- a/main/installer-osx/pom.xml +++ b/main/installer-osx/pom.xml @@ -41,7 +41,9 @@ - + + + diff --git a/main/installer-win-portable/pom.xml b/main/installer-win-portable/pom.xml index af8c84cf1..b58c994f3 100644 --- a/main/installer-win-portable/pom.xml +++ b/main/installer-win-portable/pom.xml @@ -43,6 +43,7 @@ + diff --git a/main/installer-win/pom.xml b/main/installer-win/pom.xml index db978f30a..713a0c82f 100644 --- a/main/installer-win/pom.xml +++ b/main/installer-win/pom.xml @@ -41,7 +41,9 @@ - + + + diff --git a/main/ui/src/main/java/org/cryptomator/ui/logging/HomeDirectoryAwareFileAppender.java b/main/ui/src/main/java/org/cryptomator/ui/logging/HomeDirectoryAwareFileAppender.java new file mode 100644 index 000000000..76487d5ff --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/logging/HomeDirectoryAwareFileAppender.java @@ -0,0 +1,82 @@ +package org.cryptomator.ui.logging; + +import java.io.IOException; +import java.io.Serializable; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.apache.commons.lang3.SystemUtils; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.Layout; +import org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender; +import org.apache.logging.log4j.core.appender.FileManager; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginAttribute; +import org.apache.logging.log4j.core.config.plugins.PluginElement; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.core.layout.PatternLayout; + +@Plugin(name = "HomeDirectoryAwareFile", category = "Core", elementType = "appender", printObject = true) +public class HomeDirectoryAwareFileAppender extends AbstractOutputStreamAppender { + + private static final long serialVersionUID = -6548221568069606389L; + private static final int DEFAULT_BUFFER_SIZE = 8192; + + protected HomeDirectoryAwareFileAppender(String name, Layout layout, Filter filter, FileManager manager) { + super(name, layout, filter, true, true, manager); + LOGGER.warn("Logging to " + manager.getFileName()); + } + + @PluginFactory + public static HomeDirectoryAwareFileAppender createAppender(@PluginAttribute("name") final String name, @PluginAttribute("fileName") final String fileName, + @PluginElement("Layout") Layout layout) { + + if (name == null) { + LOGGER.error("No name provided for FileAppender"); + return null; + } + + final Path filePath; + if (fileName == null) { + LOGGER.error("No filename provided for FileAppender with name " + name); + return null; + } else if (fileName.startsWith("~/")) { + // home-dir-relative Path: + final Path userHome = FileSystems.getDefault().getPath(SystemUtils.USER_HOME); + filePath = userHome.resolve(fileName.substring(2)); + } else if (fileName.startsWith("/")) { + // absolute Path: + filePath = FileSystems.getDefault().getPath(fileName); + } else { + // relative Path: + try { + final URI jarFileLocation = HomeDirectoryAwareFileAppender.class.getProtectionDomain().getCodeSource().getLocation().toURI(); + final Path workingDir = FileSystems.getDefault().getPath(jarFileLocation.getPath()).getParent(); + filePath = workingDir.resolve(fileName); + } catch (URISyntaxException e) { + LOGGER.error("Unable to resolve working directory ", e); + return null; + } + } + + if (layout == null) { + layout = PatternLayout.createDefaultLayout(); + } + + if (!Files.exists(filePath.getParent())) { + try { + Files.createDirectories(filePath.getParent()); + } catch (IOException e) { + LOGGER.error("Could not create parent directories for log file located at " + filePath.toString(), e); + return null; + } + } + + final FileManager manager = FileManager.getFileManager(filePath.toString(), false, false, true, null, layout, DEFAULT_BUFFER_SIZE); + return new HomeDirectoryAwareFileAppender(name, layout, null, manager); + } + +} diff --git a/main/ui/src/main/resources/log4j2.xml b/main/ui/src/main/resources/log4j2.xml index 96394fcbc..8893990fc 100644 --- a/main/ui/src/main/resources/log4j2.xml +++ b/main/ui/src/main/resources/log4j2.xml @@ -7,7 +7,7 @@ Contributors: Markus Kreusch - switched to log4j 2 --> - + @@ -18,16 +18,20 @@ + + + - + - + + - +