文档章节

Akka系列之Logging

mOnsoOn1360
 mOnsoOn1360
发布于 2017/07/25 09:37
字数 500
阅读 20
收藏 0
点赞 0
评论 0

在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);

© 著作权归作者所有

共有 人打赏支持
mOnsoOn1360
粉丝 4
博文 10
码字总数 3338
作品 0
合肥
程序员
如何保证在ActorSystem关闭的时候,所有的ActorRef任务都能执行完?

做过一个实验,把要处理的任务sleep 100ms,然后循环tell10次,也就是onReceiver那里会比较耗时,然后循环tell完之后。立即关闭ActorSystem,会报错,只执行了第一次的任务,后来的几次都没执...

ChangeZ ⋅ 2017/09/10 ⋅ 0

spark work启动失败

hostname里不能包含"_",否则报错 INFO RemoteActorRefProvider$RemoteDeadLetterActorRef: Message [org.apache.spark.deploy.DeployMessages$RegisterWorker] from Actor[akka://sparkWor......

wennan ⋅ 2014/10/23 ⋅ 0

Akka Actor Inbox_信箱

Akka Actor Inbox信箱 Inboxsend_receive Inbox 形象的表示为Actor的信箱,具有收发信息的功能,所以,Inbox 对象有这两种方法: send(target, "hello") ; receive(Duration. create(1, Time...

秋风醉了 ⋅ 2015/01/12 ⋅ 1

Scala 技术周刊 | 第 22 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Status of the Collections Scala 集合重构进展 Akka 系列(十):Akka 集群之 Ak...

ScalaCool ⋅ 2017/09/22 ⋅ 0

Akka 2.4.19 发布,Actor 模型开发库

Akka 2.4.19 发布了。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。 该版本包含一些改进和 bug 修复,具体如下: 修复在 transport ...

王练 ⋅ 2017/06/14 ⋅ 1

Akka 2.5.3 发布,Actor 模型开发库

Akka v2.5.3 发布了。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。 Akka v2.5.3 是 2.5 的新补丁版本,包含一些显着的改进和错误修复...

两味真火 ⋅ 2017/06/20 ⋅ 4

Scala 技术周刊 | 第 24 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Resolve me, Implicitly 依赖注入 Refined types, what are they good for? 让类型...

ScalaCool ⋅ 2017/10/23 ⋅ 0

Akka 2.4 RC1 发布,Actor 开发模型库

Akka 2.4 RC1 发布,相比最后一个 M 版本,主要改进如下: Persistence Query types for LevelDB protobuf serialization for Cluster Sharding, Cluster Client and Cluster Singleton poss......

oschina ⋅ 2015/08/22 ⋅ 1

Scala 技术周刊 | 第 27 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Replacing IntelliJ with Emacs for Scala Development 用 Emacs 进行 Scala 开发 ...

ScalaCool ⋅ 2017/11/27 ⋅ 0

spark-submit yarn-client 运行失败

2015-08-26 16:48:55,941 INFO [main] spark.SecurityManager (Logging.scala:logInfo(59)) - Changing view acls to: root 2015-08-26 16:48:55,946 INFO [main] spark.SecurityManager (Lo......

starmichael ⋅ 2015/08/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 9分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 13分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 16分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 34分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 41分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 42分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 45分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 45分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 51分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 54分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部