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