Используйте ::
вместо .
MyObject o = MyMath::calcSomething();
Когда вы вызываете метод без объекта класса, вы должны использовать нотацию ::
. Вы также можете вызывать статический метод через объекты класса или указатели на них, в этом случае вам следует использовать обычные обозначения .
или ->
:
MyObject obj;
MyObject* p = new MyObject();
MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
You should use SLF4J+Logback for logging.
It provides neat features like parametrized messages and (in contrast to commons-logging) a Mapped Diagnostic Context (MDC, javadoc, documentation).
Using SLF4J makes the logging backend exchangeable in a quite elegant way.
Additionally, SLF4J supports bridging of other logging frameworks to the actual SLF4J implementation you'll be using so logging events from third party software will show up in your unified logs - with the exception of java.util.logging that can't be bridged the same way that other logging frameworks are.
Bridging jul is explained in the javadocs of SLF4JBridgeHandler.
I've had a very good experience using the SLF4J+Logback combination in several projects and LOG4J development has pretty much stalled.
SLF4J has the following remaining downsides:
Выполните повторный вход в систему, чтобы узнать больше о Java EE:
в целом (от кода до документации) он учитывает контейнеры - как сосуществуют несколько приложений , как реализованы загрузчики классов и т. д. Контексты для регистраторов, JNDI, конфигурация JMX и т. д.
с точки зрения разработчика почти то же самое, Logback добавляет параметризованное ведение журнала (нет необходимости использовать if (logger.isDebugEnabled ()) для избегайте накладных расходов на конкатенацию строк)
Log4j - только гигантский плюс - старая поддержка JVM, маленькая (IMO) NDC (Logback only MDC), некоторые расширения. Например, я написал расширение для configureAndWatch для Log4j, такого нет для Logback