Akka系列之Logging

在akka中如何使用log

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

代码中使用Logging

1import akka.actor.*; 2import akka.event.Logging; 3import akka.event.LoggingAdapter; 4 5 6class MyActor extends UntypedActor { 7 LoggingAdapter log = Logging.getLogger(getContext().system(), this); 8 @Override 9 public void preStart() { 10 log.debug("Starting"); 11 } 12 @Override 13 public void preRestart(Throwable reason, Option<Object> message) { 14 log.error(reason, "Restarting due to [{}] when processing [{}]", 15 reason.getMessage(), message.isDefined() ? message.get() : ""); 16} 17 public void onReceive(Object message) { 18 if (message.equals("test")) { 19 log.info("Received test"); 20 } else { 21 log.warning("Received unknown message: {}", message); 22 } 23} }

Dead letters的log

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

1akka { 2 log-dead-letters = 10 3 log-dead-letters-during-shutdown = on 4}

调整logging的级别

1 akka { 2 loglevel = "DEBUG" 3}

启动时显示相应的config

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

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

1akka { 2 actor { 3 debug { 4 # enable DEBUG logging of all AutoReceiveMessages (Kill, PoisonPill et.c.) 5 autoreceive = on 6 } 7 } 8 9}

使用SLF4J

  • maven中新增配置

    <!-- https://mvnrepository.com/artifact/com.typesafe.akka/akka-slf4j_2.11 -->
    1<dependency> 2 <groupId>com.typesafe.akka</groupId> 3 <artifactId>akka-slf4j_2.11</artifactId> 4 <version>2.4.17</version> 5</dependency> 6<!-- 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>
    1 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 2 <fileNamePattern>logs\akka.%d{yyyy-MM-dd}.%i.log</fileNamePattern> 3 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 4 <maxFileSize>50MB</maxFileSize> 5 </timeBasedFileNamingAndTriggeringPolicy> 6 </rollingPolicy> 7</appender> 8<!-- 控制台输出 --> 9<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 10 <!-- 日志输出编码 --> 11 <Encoding>UTF-8</Encoding> 12 <layout class="ch.qos.logback.classic.PatternLayout"> 13 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 14 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 15 </layout> 16</appender> 17 18<root level="DEBUG"> 19 <appender-ref ref="FILE" /> 20 <appender-ref ref="STDOUT"/> 21</root>
    </configuration>
  • 程序中使用

    private Logger log = LoggerFactory.getLogger(XXX.class);

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )