/**
* Reassigns the {@link System#out} and {@link System#err} streams to a file in the {@code logs}
* directory.
*
* <p>Additonally, it filters out the {@code sessionid} parameter from the {@code Setting user: }
* line that is printed to the console by one of the classes within the client executable.
*
* @param username the {@code username} parameter from MinecraftApplet
*/
public static void reassignOutputStream(String username) {
Path filePath = getFilePath(username);
if (Objects.isNull(filePath)) {
return;
}
try {
PrintStream ps =
new PrintStream(filePath.toFile()) {
@Override
public void println(String x) {
String filter = addToFilter(x);
super.println(filter);
}
private String addToFilter(String x) {
String settingUser = "Setting user: ";
if (x.startsWith(settingUser)) {
String[] split = x.split(",");
String[] tokenSplit = split[1].split(":");
if (tokenSplit.length == 3) {
String accessToken = tokenSplit[1];
String profileId = tokenSplit[2];
return new StringBuilder()
.append(split[0])
.append(", token:")
.append(accessToken, 0, 0)
.append("<accessToken>:")
.append(profileId)
.toString();
}
}
return x;
}
};
System.setOut(ps);
System.setErr(ps);
} catch (FileNotFoundException fnfe) {
LOGGER.error("Cannot create {}", filePath, fnfe);
}
}
}