我在akka系统中运行slf4j
记录器。如果系统内存不足,我会在控制台中获得OutOfMemoryError
。但是,这不会显示在日志文件中。这使得这些错误难以发现,因为我必须在它们从控制台顶部消失之前注意到它们。有没有办法让它们显示在日志文件中?
这是错误:
[error] (pool-21-thread-22) java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
....
这是我的logback.xml
,我认为我设置为在日志文件和控制台中提供完全相同的输出:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%X{akkaSource}] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log/akka.log</file>
<append>false</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%X{akkaSource}] [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="slick" level="INFO">
</logger>
<logger name="myserver" level="DEBUG">
</logger>
<logger name="akka" level="DEBUG">
</logger>
<logger name="spray" level="DEBUG">
</logger>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
大多数其他错误都出现在控制台和日志文件中,但不出现在OutOfMemoryError
的错误中。感谢。
答案 0 :(得分:0)
使用Scalatra,我通过将error
添加到MyServlet extending ScalatraServlet
来获取要在日志上显示的OOM:
error {
case t: Throwable => {
logger.error(s"Unexpected throwable: ${t.toString}", t)
throw t
}
}