public static void applyLoggingChanges() throws IOException {
    logger.atInfo().log("Applying logger changes...");
    LogOptions logOptions = Config.getInstance().getLog();
    Logger.setConsoleLogging(logOptions.getToStderr());
    Logger.setLogLevel(Config.fromProtoLogLevel(logOptions.getLevel()));

    String path = FileUtils.ensureTrailingSlash(logOptions.getDirectory());
    if (!new File(path).isDirectory()) {
      throw new IOException("Not a directory: " + path);
    }
    Logger.setFileHandler(new FileHandler(path + Constants.LOG_FILE_NAME));
    Logger.setFileLogging(logOptions.getToFile());
  }
Parses command line arguments.

@param args the arguments, as passed into {@link #main(String[])}.
@return a list of positional arguments without any options or {@code null} on error.
java/ui/src/main/java/com/google/security/zynamics/bindiff/BinDiff.java