Checkstyle Regexp, чтобы перехватить всю консольную печать в Java - PullRequest
0 голосов
/ 01 июля 2019

У меня есть этот блок Checkstyle, чтобы помешать людям печатать на консоли в моем проекте:

<module name="Regexp">
    <property name="format" value="((System\.|(out|err)\.print)|printStackTrace)"/>
    <property name="ignoreComments" value="true"/>
    <property name="illegalPattern" value="true"/>
    <property name="message" value="No printing to console, use a logger."/>
</module>

Где регулярное выражение: ((System\.|(out|err)\.print)|printStackTrace)

Однако кто-то подправил это: out.println импортируя import static java.lang.System.out;.

Поэтому я обновил регулярное выражение: ((System\.(out|err))|printStackTrace|(out|err)\.(print|write|append))

Мой вопрос: охватывает ли это регулярное выражение все способы печати на консоли вДжава?У кого-нибудь есть лучшее регулярное выражение, которое они используют в Checkstyle?

1 Ответ

0 голосов
/ 04 июля 2019

Если вы не хотите, чтобы люди использовали System.out.println, то лучшее, что вы можете сделать, это доказать, что их работа в опасности, и угрожать им другими контрмерами .(Пожалуйста, я шучу, никогда не делай этого):)

Они могут просто сделать что-то вроде

import static java.lang.System.out;

public class App 
{
    public interface wvs {
        void abc(Object o);
    }

    static final wvs bwz = out::println;  /* this is the only reference to 
                                           * println, but you can hide it 
                                           * in another part of the 
                                           * application */

    static void blah(wvs o, Object oo)
    {
        o.abc( oo );
    }

    public static void main( String[] args )
    {
        System.out.println( "Hello World!" ); /* this will be filtered */
        blah(bwz, "another message by courtesy of LC"); /* will this? */
    }
}

и заставить тебя безумно искать звонки на System.out.println().Вы даже можете написать класс Logger для печати на консоли, минуя конфигурацию Logger.:)

Как подсказка, Никогда не пытайтесь силой доказать человеческий разум, вы потеряете .Как хороший менеджер, постарайтесь убедить своих людей действовать так, как ожидалось.Убедите их в преимуществах использования Loggers, но никогда не пытайтесь их использовать грубой силой.

Старайтесь предлагать им бесплатное пиво, если вы не видите вывода консоли из своего приложения в течение одного месяца ... Это работает почти всегда.

...