Bläddra i källkod

Writing logfiles now.

Sebastian Stenzel 10 år sedan
förälder
incheckning
3d3cb7bb86

+ 3 - 1
main/installer-linux/pom.xml

@@ -41,7 +41,9 @@
 								<fx:deploy nativeBundles="deb" outdir="${project.build.directory}" outfile="Cryptomator-${project.parent.version}" verbose="true">
 									<fx:application name="${javafx.application.name}" version="${project.version}" mainClass="${exec.mainClass}" />
 									<fx:info title="${javafx.application.name}" vendor="cryptomator.org" copyright="cryptomator.org" license="MIT" category="Utility" />
-									<fx:platform javafx="2.2+" j2se="8.0" />
+									<fx:platform javafx="2.2+" j2se="8.0">
+										<fx:property name="logPath" value="~/.Cryptomator/cryptomator.log" />
+									</fx:platform>
 									<fx:resources>
 										<fx:fileset dir="../target/" includes="Cryptomator-${project.parent.version}.jar" />
 									</fx:resources>

+ 3 - 1
main/installer-osx/pom.xml

@@ -41,7 +41,9 @@
 								<fx:deploy nativeBundles="dmg" outdir="${project.build.directory}" outfile="Cryptomator-${project.parent.version}" verbose="true">
 									<fx:application name="${javafx.application.name}" version="${project.version}" mainClass="${exec.mainClass}" />
 									<fx:info title="${javafx.application.name}" vendor="cryptomator.org" copyright="cryptomator.org" license="MIT" category="Utility" />
-									<fx:platform javafx="2.2+" j2se="8.0" />
+									<fx:platform javafx="2.2+" j2se="8.0">
+										<fx:property name="logPath" value="~/Library/Logs/Cryptomator/cryptomator.log" />
+									</fx:platform>
 									<fx:resources>
 										<fx:fileset dir="../target/" includes="Cryptomator-${project.parent.version}.jar" />
 									</fx:resources>

+ 1 - 0
main/installer-win-portable/pom.xml

@@ -43,6 +43,7 @@
 									<fx:info title="${javafx.application.name}" vendor="cryptomator.org" copyright="cryptomator.org" license="MIT" category="Utility" />
 									<fx:platform javafx="2.2+" j2se="8.0">
 										<fx:property name="settingsPath" value="./settings.json" />
+										<fx:property name="logPath" value="cryptomator.log" />
 									</fx:platform>
 									<fx:resources>
 										<fx:fileset dir="../target/" includes="Cryptomator-${project.parent.version}.jar" />

+ 3 - 1
main/installer-win/pom.xml

@@ -41,7 +41,9 @@
 								<fx:deploy nativeBundles="exe" outdir="${project.build.directory}" outfile="Cryptomator-${project.parent.version}" verbose="true">
 									<fx:application name="${javafx.application.name}" version="${project.version}" mainClass="${exec.mainClass}" />
 									<fx:info title="${javafx.application.name}" vendor="cryptomator.org" copyright="cryptomator.org" license="MIT" category="Utility" />
-									<fx:platform javafx="2.2+" j2se="8.0" />
+									<fx:platform javafx="2.2+" j2se="8.0" >
+										<fx:property name="logPath" value="cryptomator.log" />
+									</fx:platform>
 									<fx:resources>
 										<fx:fileset dir="../target/" includes="Cryptomator-${project.parent.version}.jar" />
 									</fx:resources>

+ 82 - 0
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<FileManager> {
+
+	private static final long serialVersionUID = -6548221568069606389L;
+	private static final int DEFAULT_BUFFER_SIZE = 8192;
+
+	protected HomeDirectoryAwareFileAppender(String name, Layout<? extends Serializable> 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<? extends Serializable> 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);
+	}
+
+}

+ 8 - 4
main/ui/src/main/resources/log4j2.xml

@@ -7,7 +7,7 @@
   Contributors:
       Markus Kreusch - switched to log4j 2
 -->
-<Configuration status="WARN">
+<Configuration status="WARN" packages="org.cryptomator.ui.logging">
 
 	<Appenders>
 		<Console name="Console" target="SYSTEM_OUT">
@@ -18,16 +18,20 @@
 			<PatternLayout pattern="%16d %-5p [%c{1}:%L] %m%n" />
 			<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
 		</Console>
+		<HomeDirectoryAwareFile name="File" fileName="${sys:logPath}">
+			<PatternLayout pattern="%16d %-5p [%c{1}:%L] %m%n" />
+		</HomeDirectoryAwareFile>
 	</Appenders>
-	
+
 	<Loggers>
 		<!-- show our own debug messages: -->
-		<Logger name="org.cryptomator" level="DEBUG"/>
+		<Logger name="org.cryptomator" level="DEBUG" />
 		<!-- mute dependencies: -->
 		<Root level="INFO">
 			<AppenderRef ref="Console" />
 			<AppenderRef ref="StdErr" />
+			<AppenderRef ref="File" />
 		</Root>
 	</Loggers>
-	
+
 </Configuration>