Java日志上云三剑客:Log4J/LogBack/Producer Lib

简介: 日志服务提供30多种数据采集方式,针对服务器、移动端、嵌入式设备及各种开发语言都提供完整的接入方案。对 Java 开发者而言,没有什么比熟悉的日志框架 Log4j、Log4j2、Logback Appender 更好使的了。

日志中心化之路

近几年来,无状态编程、容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化:

_1

  • 应用架构开始从单体系统逐步转变微服务,其中的业务逻辑随之而来就会变成微服务之间调用与请求。
  • 资源角度来看,传统服务器这个物理单位也逐渐淡化,变成了看不见摸不到的虚拟资源模式。

从以上两个变化可以看到这种弹性、标准化架构背后,原先运维与诊断的需求也变得越来越复杂。在10年前我们可以快速登陆到服务器上捞取日志,Attach进程的模式已再也不存在,面对我们的更多是一个标准化的“黑盒”。

_2

​ 为了应对这种变化趋势,诞生一系列面向DevOps诊断与分析的工具。例如集中式监控、集中式日志系统、以及SaaS化的各种部署、监控等服务。

​ 日志中心化解决的是以上这个问题,既应用产生日志后实时(或准实时)传输到中心化的节点服务器,例如Syslog,Kafka,ELK,Hbase进行集中式存储是一些常见的模式。

中心化四个好处

  • 使用方便:在无状态应用中最麻烦的要属Grep日志了,集中式存储只要运行一个Search命令就能够替代原先漫长的过程
  • 存储与计算分离:定制机器硬件时无需为日志存储考虑空间大小
  • 更低成本:集中式日志存储可以削峰填谷,预留更高水位
  • 安全:当发生黑客入侵以及灾难时,关键数据留作取证

_

采集端 (Java系列)

日志服务提供30+数据采集方式,针对服务器、移动端、嵌入式设备及各种开发语言都提供完整的接入方案。对Java 开发者而言,没有什么比熟悉的日志框架 Log4j、Log4j2、Logback Appender更好使的了。

对Java应用而言,目前有两种主流的日志采集方案:

  • Java程序将日志落盘,通过Logtail进行实时采集
  • Java程序直接配置日志服务提供的Appender,当程序运行时,实时将日志发完服务端

两者的差别如下:

日志落盘+Logtai采集 Appender 直接发送
实时性 日志落文件,通过Logtail采集 直接发送
吞吐量
断点续传 支持,取决于Logtail 配置大小 支持,取决于内存大小
关心应用位置 需要,配置采集机器组时 不需要,主动发送
本地日志 支持 支持
关闭采集 Logtail移除配置 修改Appender配置,重启应用

通过Appender可以在不改任何代码情况下,通过Config就能够非常容易完成日志实时采集工作,日志服务提供的Java系列Appender有如下几大优势:

  • 无需修改程序,修改配置即生效
  • 异步化 + 断点续传:IO不影响主线程,支持一定网络和服务容错
  • 高并发设计:满足海量日志写入需求
  • 支持上下文查询功能:写入支持支持在服务端还原原始进程中精确上下文(前后N条日志)

Appender 介绍与使用

目前提供Appender如下,底层均使用 aliyun-log-producer 完成数据的写入。

这四者的差别如下:

      aliyun-log-log4j-appender aliyun-log-log4j2-appender aliyun-log-logback-appender aliyun-log-producer
说明 针对 log4j 1.x 开发的 appender,如果您的应用程序正在使用 log4j 1.x 日志框架,建议您选择该 appender。 针对 log4j 2.x 开发的 appender,如果您的应用程序正在使用 log4j 2.x 日志框架,建议您选择该 appender。 针对 logback 开发的 appender,如果您的应用程序正在使用 logback 日志框架,建议您选择该 appender。 为运行在大数据、高并发场景下的 Java 应用量身打造的高性能写 LogHub 类库,目前提供的 appender 底层均使用它完成数据写入。
它具有很高的灵活性,可以让您指定写入 Loghub 中数据的字段和格式,如果您发现我们提供的 appender 无法满足您的业务需求,您可以基于它开发适合您的日志采集程序。

接入 Appender

可参考 aliyun-log-log4j-appender配置步骤部分接入 appender。

配置文件log4j.properties的内容如下:

log4j.rootLogger=WARN,loghub

log4j.appender.loghub=com.aliyun.openservices.log.log4j.LoghubAppender

#日志服务的project名,必选参数
log4j.appender.loghub.projectName=[your project]
#日志服务的logstore名,必选参数
log4j.appender.loghub.logstore=[your logstore]
#日志服务的http地址,必选参数
log4j.appender.loghub.endpoint=[your project endpoint]
#用户身份标识,必选参数
log4j.appender.loghub.accessKeyId=[your accesskey id]
log4j.appender.loghub.accessKey=[your accesskey]

查询与分析

通过上述方式配置好 appender 后,Java 应用产生的日志会被自动发往日志服务。可以通过 LogSearch/Analytics 对这些日志实时查询和分析。本文提供的样例的日志格式如下:

记录用户登录行为的日志

level:  INFO  
location:  com.aliyun.log4jappendertest.Log4jAppenderBizDemo.login(Log4jAppenderBizDemo.java:38)
message:  User login successfully. requestID=id4 userID=user8  
thread:  main  
time:  2018-01-26T15:31+0000  

记录用户购买行为的日志

level:  INFO  
location:  com.aliyun.log4jappendertest.Log4jAppenderBizDemo.order(Log4jAppenderBizDemo.java:46)
message:  Place an order successfully. requestID=id44 userID=user8 itemID=item3 amount=9  
thread:  main  
time:  2018-01-26T15:31+0000 
开启查询分析

若要对数据进行查询和分析,需要首先开启查询分析功能。开启步骤如下:

  • 登录 日志服务管理控制台
  • 选择目标项目,单击项目名称或者单击右侧的 管理
  • 选择目标日志库并单击日志索引列下的 查询
  • 单击右上角的 设置查询分析 > 设置
  • 进入设置菜单,为下列字段开启查询。

3

分析实例

以下视频包含了下述5个分析实例。

1. 统计过去1小时发生Error最多的3个位置

语法示例

level: ERROR | select location ,count(*) as count GROUP BY  location  ORDER BY count DESC LIMIT 3
2. 统计过去15分钟各种日志级别产生的日志条数

语法示例

| select level ,count(*) as count GROUP BY level ORDER BY count DESC
3. 日志上下文查询

对于任意一条日志,能够精确还原原始日志文件上下文日志信息。

参阅: 上下文查询

4. 统计过去1小时,登录次数最多的三个用户

语法示例

login | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, count(*) as count GROUP BY userID ORDER BY count DESC LIMIT 3
5. 统计过去15分钟,每个用户的付款总额

语法示例

order | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, sum(cast(regexp_extract(message, 'amount=(?<amount>[a-zA-Z\d]+)', 1) AS double)) AS amount GROUP BY userID

特别感谢

aliyun-log-log4j-appender,aliyun-log-log4j2-appender,aliyun-log-logback-appender,aliyun-log-producer-java 是由阿里云团队和共创平台上的贡献者共同完成的。感谢你们对项目作出的杰出贡献。

aliyun-log-log4j-appender 贡献者:@zzboy

aliyun-log-log4j2-appender 贡献者:@LNAmp @zzboy

aliyun-log-logback-appender 贡献者:@lionbule @zzboy

aliyun-log-producer-java 贡献者:@zzboy

技术支持

大家在使用过程中遇到的任何问题,可以加钉钉群11775223联系我们:

扫我进群

扫我进群

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
3920 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
1313 3
|
10月前
|
XML JSON Java
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
XML Java Maven
log4j 日志的简单使用
这篇文章介绍了Log4j日志框架的基本使用方法,包括在Maven项目中添加依赖、配置`log4j.properties`文件以及在代码中创建和使用Logger对象进行日志记录,但实际打印结果中日志级别没有颜色显示。
log4j 日志的简单使用
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
839 54
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
381 9

热门文章

最新文章

相关产品

  • 日志服务