Akka中使用Logback日志框架

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日志。

时间: 2024-10-09 10:49:26

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

logback日志框架的简单使用

最近在自己搭建项目的时候,遇到logback选的问题,现在记录如下 在框架中使用logback日志框架,关于logback和log4j日志框架的选择,这里就不多说了网上百度一大堆,总之一句话 logback要比log4j效率高,性能好,配置灵活. 1.首先在maven中增加依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId&g

SLF4J和Logback日志框架详解

SLF4J和Logback日志框架详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文讲述SLF4J和Logback日志框架.   SLF4J是一套简单的日志外观模式的Java API,帮助在项目部署时对接各种日志实现. LogBack在运行时使用JMX帮助修改日志配置,在生产状态下无需重启应用程序. SLF4J SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logback.Log4j.Commons-logging和JDK自带的l

Spring Boot 整合 Logback 日志框架

常用处理 Java 的日志组件有 slf4j.log4j.logback.common-logging 等.logback 基于 log4j 基础上大量改良,不能单独使用,推荐配合日志框架 slf4j 来使用. logback 当前分成三个模块:logback-core.logback-classic 和 logback-access,logback-core 是其它两个模块的基础模块 logback 的核心对象:Logger(日志记录器).Appender(指定日志输出的目的地,目的地可以是控

Spring MVC整合logback日志框架实战

1.引入依赖,本项目maven构建,普通项目导入想要的jar包即可 版本 <properties> <slf4j-api.version>1.7.7</slf4j-api.version> <logback.version>1.1.3</logback.version> </properties> 依赖包 <dependency> <groupId>ch.qos.logback</groupId>

spring-boot logback日志常用配置解释

1)引入 spring-boot默认日志系统就是logback日志框架 spring-boot引入logback的maven依赖关系树如下: 2)配置 在application.properties文件中 #backlog setting logging.config=logback-spring.xml 或者在 application-dev.yml文件中 logging: config: classpath:logback-spring.xml logback-spring.xml配置详解

三、日志框架

1.市面上的日志框架 JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j JUL(java.util.logging) Log4j2 Logback SpringBoot:底层是Spring框架,Spring框架默认是用JCL: Sp

SpringBoot整合+logback日志配置

本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h

Springboot 系列(四)Spring Boot 日志框架

注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默认日志输出.而 Spring Boot 默认选择了 SLF4J 结合 LogBack.那我们在项目中该使用哪种日志框架呢?在对于不同的第三方 jar 使用了不同的日志框架的时候,我们该怎么处理呢? 1. 日志框架介绍 日志对于应用程序的重要性不言而喻,不管是记录运行情况还是追踪线上问题,都离不开对日

SpringBoot与日志框架1

一.日志框架 1.无论在什么系统,日志框架都是一个重要角色,所以理解和用好日志框架是相当重要的:像JDBC一样,日志框架分为接口层的门面和具体的实现组成. 2.市面上的产品: 2.1门面:SLF4J(Simple Loggin Facade for Java).JCL(Jakarta Common Loggin).jboss-logging 2.2具体实现:Log4j->Logback.Log4j2.JUL(java.util.loging) 其中SLF4J.Log4j->Logback都是出