使用Spring Boot和Logback登录到Redis

在进行集中式日志记录时,例如使用Elasticsearch,Logstash和Kibana或Graylog2,您可以为Java应用程序提供几个选项。 您既可以编写标准的应用程序日志,也可以使用Logstash解析这些日志,这些日志既可以直接使用,也可以使用logstash-forwarder运送到另一台计算机。 另外,您可以直接以更合适的格式(如JSON)编写,因此处理步骤不需要太多的工作来解析消息。 第三种选择是直接写入不同的数据存储,该存储充当日志消息的缓冲区。 在本文中,我们正在研究如何在Spring Boot应用程序中配置Logback以将日志消息直接写入Redis 。

概述-redis-logstash

雷迪斯

我们正在使用Redis作为消息的日志缓冲区。 不是每个人都对Redis感到满意,但这是一个常见的选择。 Redis将其内容存储在内存中,使其非常适合快速访问,但也可以在必要时将其同步到光盘。 Redis的一个特殊功能是值可以是不同的数据类型,例如字符串,列表或集合。 我们的应用程序使用单个键和值对,其中键是应用程序的名称,值是包含我们所有日志消息的列表。 这样,我们可以在一个Redis实例中处理多个日志应用程序。

在测试设置时,您可能还需要调查Redis中存储的数据。 您可以使用redis-cli client访问它。 我收集了一些有用的命令来验证您的日志消息是否实际上已写入Redis。

命令 描述
KEYS * 显示此Redis实例中的所有键
LLEN key 显示key列表中的消息数
LRANGE key 0 100 显示key列表中的前100条消息

登录配置

大多数情况下,使用Logback时,所有配置都使用XML文件。 Appender是将日志输出发送到某处的东西。 记录器用于设置日志级别,并将附加器附加到应用程序的某些部分。

对于Spring Boot,Logback可用于使用spring-boot-starter-logging的任何应用程序,它也是常见spring-boot-starter-web的依赖项。 可以将配置添加到位于src/main/resources名为logback.xml的文件中。

Spring Boot随附了已正确配置的文件和控制台附加程序。 我们可以在文件中包括基本配置,以保留所有预定义的配置。

为了登录到Redis,我们需要添加另一个appender。 一个不错的选择是相当轻巧的logback-redis-appender ,它使用Java客户端Jedis。 日志消息直接以JSON格式写入Redis,因此它非常适合logstash之类。 我们可以使用以下配置将Spring Boot日志记录到Redis的本地实例。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml"/><appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender"><host>localhost</host><port>6379</port><key>my-spring-boot-app</key></appender><root level="INFO"><appender-ref ref="LOGSTASH" /><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
</configuration>

我们配置一个appender命名LOGSTASH那就是一个实例RedisAppender 。 为本地Redis实例设置了主机和端口,键标识用于日志的Redis键。 还有更多可用选项,例如将日志消息推送到Redis的时间间隔。 浏览该项目的自述文件以获取更多信息。

Spring Boot依赖关系

为了使日志记录正常工作,我们当然必须为pom添加logback-redis-appender依赖项。 根据您的Spring Boot版本,您可能会在日志文件中看到一些缺少方法的错误。

这是因为Spring Boot 管理其内部使用的依赖项,而jedis和commons-pool2的版本与我们需要的依赖项不匹配。 如果发生这种情况,我们可以配置要在pom的properties部分中使用的版本。

<properties><commons-pool2.version>2.0</commons-pool2.version><jedis.version>2.5.2</jedis.version>
</properties>

现在,该应用程序将启动,您可以看到它也将日志消息发送到Redis。

加强配置

最好不要在logback.xml配置主机和端口。 当部署到具有不同设置的另一环境时,您必须更改文件或部署自定义文件。

Logback的Spring Boot集成允许使用主配置文件application.properties来设置一些配置选项,例如要登录的文件和日志级别。 不幸的是,这是对某些值的一种特殊处理,就我所知,您无法添加自定义值。

但是幸运的是,Logback支持使用环境变量,因此我们不必依赖配置文件。 设置了环境变量REDIS_HOSTREDIS_PORT您可以对附加程序使用以下配置。

<appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender"><host>${REDIS_HOST}</host><port>${REDIS_PORT}</port><key>my-spring-boot-app</key></appender>

我们甚至可以更进一步。 要仅在设置了属性时激活附加程序,可以将条件处理添加到配置中。

<if condition='isDefined("REDIS_HOST") && isDefined("REDIS_PORT")'><then><appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender"><host>${REDIS_HOST}</host><port>${REDIS_PORT}</port><key>my-spring-boot-app</key></appender></then></if>

您可以使用Java表达式来确定是否应评估该块。 当附加器不可用时,Logback将仅记录错误并使用配置的任何其他附加器。 为此,您需要将Janino库添加到pom中 。

现在,根据环境变量激活了附加程序。 如果愿意,可以跳过本地开发的设置,而仅在生产系统上设置变量。

结论

轻松启动Spring Boot或仅登录Redis都很容易,但是其中一些细节是正确的工作。 但这值得付出努力:一旦习惯了集中式日志记录,就不再需要没有它的系统。

翻译自: https://www.javacodegeeks.com/2015/01/logging-to-redis-using-spring-boot-and-logback.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(1)《Head First HTML与CSS》学习笔记---HTML基本概念

前言&#xff1a; 1. 这本书并没有面面俱到&#xff0c;涵盖所有内容&#xff0c;只提供作为初学者真正需要的东西&#xff1a;基本知识和信心。所以这不是唯一的参考书。&#xff08;我买了一本《HTML5权威指南》作为参考书和这本一起看&#xff0c;但还是以本书为第一个…

与Java EE和Camel的轻量级集成

Enterprise Java具有不同的风格和观点。 从简单的平台技术开始&#xff0c;即众所周知的Java EE&#xff0c;再到不同的框架和集成方面&#xff0c;最后是涉及以数据为中心的用户界面或特定可视化效果的用例。 Java EE本身无法解决的最突出的问题是“集成”。 有许多来自知名供…

[工具库]JFileDownloader工具类——多线程下载网络文件,并保存在本地

本人大四即将毕业的准程序员&#xff08;JavaSE、JavaEE、android等&#xff09;一枚&#xff0c;小项目也做过一点&#xff0c;于是乎一时兴起就写了一些工具。 我会在本博客中陆续发布一些平时可能会用到的工具。 代码质量可能不是很好&#xff0c;大家多担待&#xff01; 代…

使用Bean验证扩展PrimeFaces CSV

你们中有些人已经知道我和我的合著者Mertalışkan正在研究PrimeFaces Cookbook的2.版。 Packt Publishing允许我从新章节“客户端验证”的一个食谱中摘录一小部分摘录。 这将有助于使读者知道这本书的内容。 在此博客文章中&#xff0c;我想讨论使用Bean验证扩展的PrimeFaces客…

ASP.NET.CORE发布后启动网站出现500.19-0x8007000d错误解决方法

本项目使用的是netcoreapp2.2&#xff0c;缺少的XML文件是swagger。发布采用的是文件系统、依赖框架。 我第一次发布asp.net.core的后台&#xff0c;发布后启动网站出现500.19错误-0x8007000d。百度查了一下原因&#xff0c;2其中大多数人说是因为没有权限&#xff0c;需要编辑…

WildFly和Docker上的Java EE 7动手实验室

Java EE 7动手实验室已在全球范围内交付&#xff0c;它是一个非常标准的应用程序&#xff0c;显示了典型Java EE 7应用程序的设计模式和反模式。 它显示了如何在接近现实的应用程序中使用以下技术&#xff1a; WebSocket 1.0 JSON处理1.0 批次1.0 上下文和依赖注入1.1 Jav…

一罐将其全部统治:Arquillian + Java 8

借助Java 8 &#xff0c;已实现了许多新的语言改进&#xff0c;以简化开发人员的生活。 在我看来&#xff0c; Java 8的最大优点之一是&#xff0c;在某些情况下&#xff0c;已开发的代码看起来比使用以前的方法更漂亮&#xff0c;我指的是Lambdas和Method引用。 这篇文章不是要…

uni-app引入阿里巴巴矢量库图标后,顶部导航栏显示小方块

引入阿里巴巴矢量图标库 首先在阿里巴巴创建项目&#xff0c;拥有图标 具体引入方法参考&#xff1a; [https://blog.csdn.net/Dream_Weave/article/details/88550978?depth_1-utm_sourcedistribute.pc_relevant.none-task&utm_sourcedistribute.pc_relevant.none-task]在…

使用Spring Integration进行消息处理

Spring Integration提供了Spring框架的扩展&#xff0c;以支持著名的企业集成模式。 它在基于Spring的应用程序中启用轻量级消息传递&#xff0c;并支持与外部系统的集成。 Spring Integration的最重要目标之一是为构建可维护且可测试的企业集成解决方案提供一个简单的模型。 …

使用RxNetty访问Meetup的流API

本文将涉及多个主题&#xff1a;响应式编程&#xff0c;HTTP&#xff0c;解析JSON以及与社交API集成。 完全在一个用例中&#xff1a;我们将通过非夸张的RxNetty库实时加载和处理新的metup.com事件&#xff0c;结合Netty框架的强大功能和RxJava库的灵活性。 Meetup提供了公开可…

js、react对象名和对象属性赋值

const resValue {}; resValue[standards${standardsNumber}] ""; Console.log(:test"&#xff0c;resValue )//

TIBCO产品的微服务和DevOps

如今&#xff0c;每个人都在谈论微服务。 您可以在数百篇文章和博客文章中读到很多有关微服务的信息。 马丁福勒 &#xff08; Martin Fowler &#xff09;的文章是一个很好的起点&#xff0c;该文章引发了有关这种新架构概念的大量讨论。 另一个很棒的资源是独立于供应商的分…

使用Degraph管理软件包依赖关系

软件开发领域的很大一部分是使系统的复杂性尽可能地低。 但是复杂性到底是什么&#xff1f; 虽然确切的语义有很大不同&#xff0c;但取决于您询问的人&#xff0c;大多数人可能都认为这与系统中部件的数量及其交互有很大关系。 考虑太空中的大理石&#xff0c;即行星&#xf…

[转载] 应急管理体系及其业务流程研究

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/03/04/2942337.html

WP8手机上的图标

一直不清楚WP8手机上两个圆的标志是什么意思&#xff0c;今天看到下面的链接&#xff0c;终于搞明白了&#xff0c;原来是打开了GPS就有。 http://www.windowsphone.com/en-us/how-to/wp8/basics/what-do-the-icons-on-my-phone-mean 转载于:https://www.cnblogs.com/wonderow/…

ASIHTTPRequest类库简介和使用说明

官方网站&#xff1a; http://allseeing-i.com/ASIHTTPRequest/ 。可以从上面下载到最新源码&#xff0c;以及获取到相关的资料。 使用iOS SDK中的HTTP网络请求API&#xff0c;相当的复杂&#xff0c;调用很繁琐&#xff0c;ASIHTTPRequest就是一个对CFNetwork API进行了封装&a…

UltraESB的首选IDE – IntelliJ IDEA

在AdroitLogic&#xff0c;我们长期以来一直在使用IntelliJ IDEA进行开发。 它是Java和相关语言/技术的最佳IDE&#xff08;它可能也是许多其他语言的选择&#xff0c;但我的经验主要是Java和相关技术&#xff09;。 Groovy和IDEA的Grails的集成很棒。 通过自动发现JDBC驱动程…

跟我一步一步开发自己的Openfire插件

这篇是简单插件开发&#xff0c;下篇聊天记录插件。 开发环境&#xff1a; System&#xff1a;Windows WebBrowser&#xff1a;IE6、Firefox3 JavaEE Server&#xff1a;tomcat5.0.2.8、tomcat6 IDE&#xff1a;eclipse、MyEclipse 8开发依赖库&#xff1a; Jdk1.6、jasper-com…

Apache FOP与Eclipse和OSGi的集成

Apache FOP是由XSL格式化对象&#xff08; XSL-FO &#xff09;驱动的开源打印处理器。 例如&#xff0c;将数据对象转换为PDF可能非常有用。 但是&#xff0c;将其集成到PDE中并最终以OSGi Service的形式运行并最终显得有些麻烦。 因此&#xff0c;我提供了一个P2存储库&…

不删除侦听器–使用ListenerHandles

听一个可观察的实例并对它的变化做出反应很有趣。 做一些必要的事情来打断或结束这种聆听会变得很有趣。 让我们看看问题的根源和解决方法。 总览 这篇文章将首先讨论这种情况&#xff0c;然后再讨论常见的方法和问题所在。 然后&#xff0c;它将提供解决大多数问题的简单抽象…