Writing logfiles now.

This commit is contained in:
Sebastian Stenzel
2015-05-24 21:51:37 +02:00
parent 0e3513e86d
commit 3d3cb7bb86
6 changed files with 100 additions and 7 deletions
@@ -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
View File
@@ -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>