Akka提供的默认日志系统只输出到控制台,这种日志系统不可以用到产品环境,当然你可以整合SLF4J这样的日志系统,下面介绍如何在Akka中使用Logback记录日志。

1. 创建Maven工程引入相关依赖。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.shindler.ioee.test</groupId>
<artifactId>akka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <name>akka</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.11 -->
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.11</artifactId>
<version>2.4.10</version>
</dependency>
<!-- 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.10</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>
</dependencies>
</project>

 

2. 添加akka配置文件,指定使用SLF4J日志系统。

# In this file you can override any option defined in the reference files.
# Copy in parts of the reference files and modify as you please. akka { # Loggers to register at boot time (akka.event.Logging$DefaultLogger logs
# to STDOUT)
loggers = ["akka.event.slf4j.Slf4jLogger"] # Log level used by the configured loggers (see "loggers") as soon
# as they have been started; before that, see "stdout-loglevel"
# Options: OFF, ERROR, WARNING, INFO, DEBUG
loglevel = "ERROR" # Log level for the very basic logger activated during ActorSystem startup.
# This logger prints the log messages to stdout (System.out).
# Options: OFF, ERROR, WARNING, INFO, DEBUG
stdout-loglevel = "ERROR" # Filter of log events that is used by the LoggingAdapter before
# publishing log events to the eventStream.
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" }

  

3. 创建Logback.xml配置文件,产品环境中,会单独记录错误日志,配置如下:

<configuration>
<!--ERROR与其他日志分开-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
<pattern>CONSOLE -- [%-5level] %d{HH:mm:ss} - %msg%n</pattern>
</pattern>
</encoder>
</appender> <!--ERROR与其他日志分开-->
<appender name="ERROR" class="ch.qos.logback.core.ConsoleAppender">
<target>System.err</target>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>
<pattern>ERROR -- [%-5level] %d{HH:mm:ss} - %msg%n</pattern>
</pattern>
</encoder>
</appender> <root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ERROR" />
</root>
</configuration>

 

4. 创建LoggerActor类,代码如下:

package com.shindler.ioee.test;

import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import scala.Option; /**
* Created by zengsam on 2016/9/29.
*/
public class LoggerActor2 extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this); @Override
public void onReceive(Object message) throws Throwable {
log.error("Received message: {}", message);
log.info("Received message: {}", message);
log.debug("Received message: {}", message);
} @Override
public void preStart() {
log.info("Starting");
} @Override
public void preRestart(Throwable reason, Option<Object> message) {
log.error(reason, "Restarting due to [{}] when processing [{}]",
reason.getMessage(), message.isDefined() ? message.get() : "");
}
}

  

5. 创建测试程序,代码如下:

package com.shindler.ioee.test;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import java.util.Date; /**
* Hello world!
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!"); ActorSystem system = ActorSystem.apply("testActorSystem");
ActorRef loggerActor = system.actorOf(Props.create(LoggerActor.class), "loggerActor");
ActorRef loggerActor2 = system.actorOf(Props.create(LoggerActor2.class), "loggerActor2");
while (true) {
try {
loggerActor.tell(new Date().toString(), ActorRef.noSender());
loggerActor2.tell(new Date().toString(), ActorRef.noSender());
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

  

运行程序,可以看到Actor使用了Logback来记录日志,并且单独记录了ERROR日志。

Akka中使用Logback日志框架的更多相关文章

  1. Spring Boot中使用logback日志框架

    说明:Spring Boot在最新的版本中默认使用了logback框架.一般来说使用时只需在classpath下创建logback.xml即可,而官方推荐使用logback-spring.xml替代, ...

  2. 在SpringBoot中添加Logback日志处理

    前言 SpringBoot项目中在官方文档中说明,默认已经依赖了一些日志框架.而其中推荐使用的就是Logback,所以这一次我将在我的模版中加入Logback日志的配置,说明一下,SpringBoot ...

  3. SpringBoot整合Logback日志框架配置全解析

    目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...

  4. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  5. 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战

    ========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...

  6. SLF4J和Logback日志框架详解

    SLF4J和Logback日志框架详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文讲述SLF4J和Logback日志框架.   SLF4J是一套 ...

  7. slf4j+logback日志框架 的具体使用操作【spring boot自带的默认日志框架】

    1.前言 是不是还在使用System.out.println()打印数据到控制台看? 东西少还好,如果多起来,那就看的很烦人了,特别还有加时间等信息. 怎么解决? 可以使用日志框架 ,常见的有 log ...

  8. log4j、logback日志框架与统一接口slf4j说明

    log4j 传入日志框架,老项目中使用较多. 日志级别 根日志级别 log4j.rootLogger=info 默认日志级别,设置后对于没有设置子级别的日志输出都走这个默认值. 子类日志级别 log4 ...

  9. 11、Logback日志框架介绍和SpringBoot整合实战 2节课

    1.新日志框架LogBack介绍     简介:日志介绍和新日志框架Logback讲解 1.常用处理java的日志组件 slf4j,log4j,logback,common-logging 等     ...

  10. 在android中使用logback-android日志框架配置 slf4j + logback

    为什么使用 slf4j + logback logbak定位于log4j的替代者,logback同样支持slf4j,方便被替换.在Android平台上,我在使用log4中遇到tag混乱的问题.相比lo ...

随机推荐

  1. 利用sqlmapapi和google-hacking联动自动化sql注入探测

    利用inurl语法搜索+sqlmap梭哈挖到过一点sql注入,这不失为一种好方法. 但是现在的sql注入漏洞的网站是比较少的了,所以这样一个个手工测,不仅效率低,还不一定有什么收获.不妨写一个goog ...

  2. ScheduledThreadPoolExecutor与System#nanoTime

    一直流传着Timer使用的是绝对时间,ScheduledThreadPoolExecutor使用的是相对时间,那么ScheduledThreadPoolExecutor是如何实现相对时间的? 先看看S ...

  3. 话说ReferenceQueue

    也是几年前写的,在内部邮件列表里发过,在这里保存一下. 看到了这篇帖子: <WeakHashMap的神话>http://www.javaeye.com/topic/587995 因为Jav ...

  4. 解决页面隐藏的元素闪现的问题v-cloak

    在v-if处加上v-cloak属性 <div class="sys-changeBox" v-cloak v-if="showTosat" @click. ...

  5. Vue.js 文本行滚动

    1.前言 文本行滚动组件,效果如图 2.封装思路 封装一个组件,接收一个数组,每个数组元素就是一个段文本 组件使用httpVueLoader进行封装加载 使用css位移,配合过渡效果才展示动画 滚动逻 ...

  6. docker安装cas

    直接docker pull apereo/cas ,docker run的时候各种报错: standard_init_linux.go:178: exec user process caused &q ...

  7. echarts 图表设置默认选中

    echarts:https://echarts.apache.org/zh/api.html#events.legendselected tfjy1997:https://blog.csdn.net/ ...

  8. forms组件与源码分析、modelform组件

    目录 一.forms组件 forms组件介绍 Form定义 二.forms组件渲染标签 三.forms组件展示信息 四.forms组件校验补充 五.forms组件参数补充 六.forms组件源码剖析 ...

  9. Spring 事务管理 基于配置文件

    事务概念: 原子性:要么都成功,有一个失败都失败 一致性:总量不变(A有100元,B有100元,总量是200元.A把100元转给B,B就有了200元,总量还是200元) 隔离性:两人操作同一条数据,不 ...

  10. 【电脑问题】开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统

    问题描述:开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统 Ctrl+Alt+Del 作用:立即终结电脑的异常状态,包括宕机 按法①:三个键一起按 按法 ②:先按住Ctrl和Alt ...