Akka系列之Logging

在akka中如何使用log

akka中显示日志不需要第三方jar, 直接使用akka的Logging即可, Logging默认是输出到STDOUT, 当然你也可以使用第三方插件如SLF4J来记录日志, Logging使用的异步方式以此来达到最小的性能损耗.

代码中使用Logging
import akka.actor.*;
import akka.event.Logging;
import akka.event.LoggingAdapter;
class MyActor extends UntypedActor {
  LoggingAdapter log = Logging.getLogger(getContext().system(), this);
  @Override
  public void preStart() {
    log.debug("Starting");
  }
  @Override
  public void preRestart(Throwable reason, Option<Object> message) {
    log.error(reason, "Restarting due to [{}] when processing [{}]",
      reason.getMessage(), message.isDefined() ? message.get() : "");
}
  public void onReceive(Object message) {
    if (message.equals("test")) {
      log.info("Received test");
    } else {
      log.warning("Received unknown message: {}", message);
    }
} }
Dead letters的log

akka中默认dead letters会以info的形式输出.你可以调整显示多少dead letter, 并在之后就不再显示这些log. 另外在程序shutdown时显示相应的dead letters.

akka {
  log-dead-letters = 10
  log-dead-letters-during-shutdown = on
}

调整logging的级别

 akka {
  loglevel = "DEBUG"
}

启动时显示相应的config

akka {
  # Log the complete configuration at INFO level when the actor system is started.
  # This is useful when you are uncertain of what configuration is used.
  log-config-on-start = on
}

如果希望非常详细的显示所有接受到的消息

akka { 
    actor {
        debug {
             # enable DEBUG logging of all AutoReceiveMessages (Kill, PoisonPill et.c.)
            autoreceive = on
        }
    } 
    
}

使用SLF4J

  • maven中新增配置
<!-- https://mvnrepository.com/artifact/com.typesafe.akka/akka-slf4j_2.11 -->
	<dependency>
	    <groupId>com.typesafe.akka</groupId>
	    <artifactId>akka-slf4j_2.11</artifactId>
	    <version>2.4.17</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>
	<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
  • resources/目录下新增logback.xml
<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
	<!-- 文件输出 -->
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs\akka.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <!-- 控制台输出 -->   
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日志输出编码 -->  
       <Encoding>UTF-8</Encoding>   
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>   
        </layout>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT"/>
    </root>
</configuration> 
  • 程序中使用
private Logger log = LoggerFactory.getLogger(XXX.class);

转载于:https://my.oschina.net/u/1159959/blog/1486676

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值