Задачу, собственно говоря, решил, вопрос такой - если делаю так
public class Solution {
    public static void main(String[] args) {
        log("In main method");
    }

    public static void log(String s) {
        //напишите тут ваш код
        StackTraceElement[] trace = Thread.currentThread().getStackTrace();
        int i = trace.length-1;
        System.out.println(trace[i].getClassName()+": "+trace[i].getMethodName()+": "+s);
    }
}
То ругается на несоблюдение практически всех пунктов условия. Что самое интересное, если просто подставлю вместо i двойку, то для валидатора все будет ок, хотя ответы в обоих случаях не отличаются ничем абсолютно. В чем загвоздка? Это же лютый хардкод - писать конкретное значение массива, логичней в данном задании завязываться именно на его длину, чтобы точно знать, что выведем main метод.