Skip to content

Instantly share code, notes, and snippets.

@matterche
Last active January 15, 2016 16:24
Show Gist options
  • Save matterche/281c548da2ccd4992568 to your computer and use it in GitHub Desktop.
Save matterche/281c548da2ccd4992568 to your computer and use it in GitHub Desktop.
Redirect System.out and System.err to Play Framework logger
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="sysout" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/e42/opt/apps/maw/log/sysout.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>3</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%msg</pattern>
</encoder>
</appender>
<logger name="globals.StdOutErrLogger" level="INFO" additivity="false">
<appender-ref ref="sysout"/>
</logger>
</configuration>
package globals
import java.io.PrintStream
import play.api.Logger
object StdOutErrLogger {
val logger = Logger(this.getClass)
def redirectSystemOutAndErrToLog() = {
try {
System.setOut(createLoggingProxy(System.out))
System.setErr(createLoggingProxy(System.err))
} catch {
case se: SecurityException => Logger.error("Unable to redirect stdout and stderr to logfile", se)
}
}
def createLoggingProxy(originalPrintStream: PrintStream): PrintStream = {
new PrintStream(originalPrintStream) {
override def print(string: String) {
originalPrintStream.print(string)
logger.info(string)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment