SCALA 的日志管理
来源:互联网 发布:telnet 指定端口号 编辑:程序博客网 时间:2024/06/05 17:26
日志对于任何一个正式的项目来说都是必不可少的组成部分,它对于系统问题的定位有着非常重大的意义。另外,它也是用户数据分析挖掘的重要来源。因此,一个好的日志框架对于开发者是至关重要的。熟悉 JAVA 的人都知道 SLF4J,这个框架提供了一组统一的日志接口,屏蔽了各种不同的日志系统具体实现,在 JAVA 领域的影响也越来越大。SCALA 同样也提供一个 SLF4J 的封装模块,同时,SCALA 还在更高层次提供了一个日志抽象模块以更加高效简便地使用日志。另外,对于 AKKA 这个替代了 SCALA 原生 Actor 模块的Actor模型实现模块,它自己也基于 SLF4J 封装了一个日志管理模块,并且以异步事件驱动的方式记录所需日志。通过这段时间对 SCALA 日志系统的学习调研,总结了下这些日志模块的使用,方便以后查阅吧,同时也希望能对初学者有微薄的帮助。
本文给出的日志方案都是以 Logback 为日志底层实现系统,Logback 是目前比较高效一个日志实现,已经逐渐取代 Log4J 的位置。下面分几种常用场景以简单示例的方式对SCALA中日志的使用进行说明,感觉这些例子已经能够自明了,就不多加文字描述了(这些例子都是可以不用修改直接运行的)。
- Slf4j + Logback
//--------------build.sbt-------------------
name := "slf4j-logback-pro"version := "0.1.0-SNAPSHOT"scalaVersion := "2.11.2"libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.0.4"
下图是SBT update 获取到的类库,包括直接被声明管理的库以及其所依赖的一些库。
//--------------src/main/scala/LogTest.scala--------------
import org.slf4j.LoggerFactoryimport com.typesafe.scalalogging.slf4j.Loggerobject LogTest extends App { val logger = Logger(LoggerFactory.getLogger("name")) logger.debug("This is very convenient ;-)")}
- Scala-logging + Logback
name := "scala_logging-logback-pro"version := "0.1.0-SNAPSHOT"scalaVersion := "2.11.2"libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"libraryDependencies += "com.typesafe.scala-logging" % "scala-logging_2.11" % "3.1.0"
import org.slf4j.LoggerFactoryimport com.typesafe.scalalogging.Loggerobject LogTest extends App { val logger = Logger(LoggerFactory.getLogger("name")) logger.debug("This is very convenient ;-)")}
- Akka: Slf4j + Logback
//--------------build.sbt-------------------
name := "akka_slf4j_pro"version := "0.1.0-SNAPSHOT"scalaVersion := "2.11.4"libraryDependencies ++= { val akka_version = "2.3.7" Seq("com.typesafe.akka" % "akka-actor_2.11" % akka_version, "com.typesafe.akka" % "akka-remote_2.11" % akka_version, "com.typesafe.akka" % "akka-slf4j_2.11" % akka_version)}libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"
下图是SBT update 获取到的类库,包括直接被声明管理的库以及其所依赖的一些库。
//------------src/main/scala/AkkaClient.scala-------------
import akka.actor.Actorimport akka.actor.ActorRefimport akka.actor.Propsimport akka.actor.ActorSystemimport akka.routing.RoundRobinRouterimport akka.event.Loggingobject AkkaClient extends App { sealed trait AkkaTestMsg case object Start case object Stop class Client extends Actor { val log = Logging(context.system, this) def receive = { case Start => println("start") log.info("good start!") self ! Stop case Stop => println("stop") log.info("good stop!") context.system.shutdown } } val system = ActorSystem("system") val client = system.actorOf(Props[Client], "client") val log = Logging(system, client) log.info("ok") client ! Start}
//-----------------src/main/resources/application.conf-----------------
akka { loggers = ["akka.event.slf4j.Slf4jLogger"] loglevel = "INFO"}
//-----------------src/main/resources/logback.xml-----------------
<?xml version="1.0" encoding="UTF-8"?><configuration> <appender name="MYCONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>%X{akkaTimestamp} %-5level[%thread] %logger{0} - %msg%n</pattern> </encoder> </appender> <appender name="MYFILE" class="ch.qos.logback.core.FileAppender"> <file>logs/akka.log</file> <append>true</append> <encoder> <pattern>%date{yyyy-MM-dd} %X{akkaTimestamp} %-5level[%thread] %logger{1} - %msg%n</pattern> </encoder> </appender> <logger name="akka" level="INFO" /> <root level="DEBUG"> <appender-ref ref="MYCONSOLE"/> <appender-ref ref="MYFILE"/> </root></configuration>
- SCALA 的日志管理
- ORACLE的日志管理
- 日志文件的管理
- iptables的日志管理
- 日志管理的说明
- linux的日志管理
- db2的日志管理
- 简单的日志管理
- linux的日志管理
- db2的日志管理
- DB2日志的管理
- 重做日志的管理
- MySQL的日志管理
- thinkphp的日志管理
- java的日志管理
- Nginx的日志管理
- 日志文件的管理
- SpringBoot的日志管理
- Python压缩文件夹/解压缩zip文件
- 设计模式--基础学习总结
- Unity3D学习之(迭代器)
- C语言中的文件流
- Struts2关于Action的系统训练3关于Action创建和path路径问题
- SCALA 的日志管理
- Spring Ajax一个简单例子
- 用python的进行压缩文件
- 二十二、startActivityForResult用法详解(转至http://www.cnblogs.com/linjiqin/archive/2011/06/03/2071956.html)
- Robotium用例命令行运行、拔除数据线及TestSuite方式执行
- python的tarfile模块实例 python把文件夹压缩成tar格式文件的例子
- Opencv——Opencv的安装配置
- 字符集和编码格式
- Javascript 获取当前页面的URL