package pl.brightinventions.slf4android;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.util.logging.FileHandler;
class FileHandlerExpose {
private static final Logger LOG = LoggerFactory.getLogger(FileHandlerExpose.class.getSimpleName());
private static Field fileNameField;
public String getCurrentFileName(FileHandler fileHandler) {
if (fileHandler == null) {
throw new IllegalArgumentException("fileHandler must not be null");
}
Field field = getFileNameField(fileHandler);
if (field != null) {
try {
return (String) field.get(fileHandler);
} catch (IllegalAccessException e) {
LOG.warn("Cant read 'fileName' field value from {}", fileHandler, e);
}
}
return null;
}
private synchronized Field getFileNameField(FileHandler fileHandler) {
//TODO: this can potentially generate multiple errors for the same reason
if (fileNameField == null) {
try {
//TODO: check if there is a better way
fileNameField = fileHandler.getClass().getDeclaredField("fileName");
fileNameField.setAccessible(true);
} catch (NoSuchFieldException e) {
LOG.warn("Could not find field 'fileName' inside class {}", fileHandler.getClass());
}
}
return fileNameField;
}
}