Почему при выводе в консоль и в текстовый файл выводятся разные значения?
Потому что return завершает работу метода, er.close() не вызывается и запись в файл не происходит.
Почитайте про SOLID (https://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%...

Там буква S - single responsibility (Принцип единственной ответственности).
Старайтесь писать методы и классы которые будут выполнять только какую-то одну функцию.

В вашем случае myFunction не должен уметь писать в файл - ему достаточно будет уметь обрабатывать входящую строку. Выглядеть это будет, примерно, так:
private static String myFunction(String url) {
        if (some condition) {
            System.err.println(url + " " + statusCode); // Видимо, логирование в консоль
            return url + " " + statusCode + "\n"; // Возврат результата
        }
        return "";    // Это же пример, верно?))
    }

И основной код:
public static void main(String[] args) throws IOException {

        FileWriter err = new FileWriter("error.txt");

        String result = myFunction(args);
        er.write(result);
        //some logic
     
        err.write(something);

        err.close();
    }

В этом варианте myFunction ничего не знает о том куда писать результат своей работы. Сегодня вы хотите писать в файл, завтра в бд, а потом окажется, что достаточно вывести в консоль. Ваша функция будет оставаться неизменной в любом случае.