All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.java.rules.squid.S1312.html Maven / Gradle / Ivy

Whatever is the logging framework (logback, log4j, commons-logging, java.util.logging, ...), a logger should be:

  • private: Never be accessible outside of its parent class. If another class needs to log something, it should instantiate its own logger.
  • static: Not dependent on an instance of a class (an object). When logging something, contextual information can of course be provided in the messages but the logger should be created at class level to prevent creating a logger along with each object.
  • final: Be created once and only once per class.

Noncompliant Code Example

public class Foo {
  public Logger logger = LoggerFactory.getLogger(Foo.class);         // Noncompliant

  public void doSomething() {
    /* ... */
  }
}

public class Bar {
  public static void main(String[] args) {
    Foo foo = new Foo();
    foo.logger.info("Program started");
    foo.doSomething();
  }
}

Compliant Solution

public class Foo {
  private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class); // Compliant

  public void doSomething() {
    /* ... */
  }
}

public class Bar {
  private static Log LOGGER = LogFactory.getLogger(Bar.class);       // Compliant

  public static void main(String[] args) {
    LOGGER.info("Program started");
    Foo foo = new Foo();
    foo.run();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy