Skip to content

Instantly share code, notes, and snippets.

@Techcable
Last active August 29, 2015 14:27
Show Gist options
  • Select an option

  • Save Techcable/d6ed2e13e56cbeabf036 to your computer and use it in GitHub Desktop.

Select an option

Save Techcable/d6ed2e13e56cbeabf036 to your computer and use it in GitHub Desktop.
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender;
import org.apache.logging.log4j.core.appender.FileManager;
import org.apache.logging.log4j.core.appender.OutputStreamManager;
import org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class DontSaveLogFile {
private DontSaveLogFile() {
}
private static Field managerField;
static {
try {
managerField = AbstractOutputStreamAppender.class.getDeclaredField("manager");
} catch (NoSuchFieldException e) {
throw new RuntimeException("Unable to get manger field", e);
}
}
private static Method closeMethod;
static {
try {
closeMethod = OutputStreamManager.class.getDeclaredMethod("close");
} catch (NoSuchMethodException e) {
throw new RuntimeException("Unable to get manger field", e);
}
}
public static void dontSaveLogFile() {
Logger logger = (Logger) LogManager.getLogger("");
File logDir = null;
for (org.apache.logging.log4j.core.Appender appender : logger.getAppenders().values()) {
if (appender instanceof RollingRandomAccessFileAppender) {
managerField.setAccessible(true);
FileManager manager;
try {
manager = (FileManager) managerField.get(appender);
closeMethod.setAccessible(true);
closeMethod.invoke(manager);
} catch (IllegalAccessException e) {
throw new RuntimeException("Unable to call setAccessible", e);
} catch (InvocationTargetException e) {
throw new RuntimeException("RollingRandomAccessFileAppender.close() threw an exception");
}
File file = new File(manager.getFileName());
if (logDir == null) {
logDir = file;
while (!logDir.getName().equals("logs")) {
logDir = file.getParentFile();
}
}
if (!file.delete()) throw new RuntimeException("Couldn't delete " + file);
logger.removeAppender(appender);
}
if (appender instanceof org.apache.logging.log4j.core.appender.ConsoleAppender) {
logger.removeAppender(appender);
}
}
if (logDir != null && !logDir.delete()) throw new RuntimeException("Couldn't delete logs dir");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment