Reputation: 16127
I am currently working with Play! Framework and It appears that logging is only working for play! only but for the classes that taht has LOGGER initialization does not work.
Here is the logback.xml
<!-- https://www.playframework.com/documentation/latest/SettingsLogger -->
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.libs.logback.ColoredLevel" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home:-.}/logs/application.log</file>
<encoder>
<pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%coloredLevel %logger{15} - %message%n%xException{10}</pattern>
</encoder>
</appender>
<appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT" />
</appender>
<logger name="play" level="INFO" />
<logger name="application" level="INFO" />
<!-- Off these ones as they are annoying, and anyway we manage configuration ourselves -->
<logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
<logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />
<root level="WARN">
<!--<appender-ref ref="ASYNCFILE" />-->
<appender-ref ref="ASYNCSTDOUT" />
</root>
</configuration>
Here is the sample class that I have configured with a logging mechanism. Every time I try to execute this code. There is no logs that is coming out
package controllers.search
import javax.inject.{Inject, Singleton}
import play.api.Logger
@Singleton
class SearchController @Inject()(cc: ControllerComponents)
extends AbstractController(cc) {
protected val LOGGER: Logger = Logger(this.getClass())
def search(q:String,
card: String,
lat: Option[String],
lng: Option[String]) = Action {
LOGGER.info("Searching "+card+" For "+q+" ")
}
I highly doubt that this is a dependency problem since every time my application boots up it shows me this message. I am assuming that my logging configured appropriately
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
Server started, use Cmd+P to stop
[info] play.api.Play - Application started (Dev)
Upvotes: 2
Views: 1118
Reputation: 48420
Try changing root logger level from WARN
to INFO
like so
<root level="INFO">
<appender-ref ref="ASYNCSTDOUT" />
</root>
All loggers inherit from root logger and according to Logback docs:
If a given logger is not assigned a level, then it inherits one from its closest ancestor with an assigned level.
Here controllers.search.SearchController
inherited WARN
level from root, hence LOGGER.info
messages were not logged.
We could also keep the root logger at WARN
and change the level of just SearchController
like so:
<logger name="controllers.search.SearchController" level="INFO" />
<root level="WARN">
<appender-ref ref="ASYNCSTDOUT" />
</root>
Similarly, the reason why play
logs were visible is due to following config already existing
<logger name="play" level="INFO" />
Upvotes: 3