如何使用默认jar(tomact-juli.jar)以json配置Tomcat Catalina日志

Sne*_*eha 8 logging json tomcat catalina

我已经更新了tomcat的logging.properties文件以以json格式打印日志。但是,问题是“message”的值有一些转义字符,这使得我的日志无效 json。请让我知道如何使用默认的 tomcat-juli.jar 转义 json 中的这些字符(:,[,],/)并用作字符串。

以下是我更新的logging.properties文件:

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

java.util.logging.SimpleFormatter.format = {"date" :"%1$tF", "timestamp": "%1$tT" , "loggerlevel": "%4$s", "loggersource": "%3$s" , "message": "%5$s%6$s"}%n

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
Run Code Online (Sandbox Code Playgroud)

Yan*_*Pak 11

我建议您使用官方方式(不使用中间件):

  1. 下载 Elastic JUL 格式化程序和日志记录核心库: https://mvnrepository.com/artifact/co.elastic.logging/jul-ecs-formatter https://mvnrepository.com/artifact/co.elastic.logging/ecs-logging-核
  2. 将它们放入 tomcat/bin 文件夹中
  3. 将它们列在tomcat/bin/setenv.sh(bat)的 CLASSPATH 系统属性中。如果没有这样的文件 - 使用以下内容创建它: 在 Unix 上 - export CLASSPATH="$CLASSPATH:ecs-logging-core.jar:jul-ecs-formatter.jar" 在 Windows 上 -set CLASSPATH=%CLASSPATH%;ecs-logging-core.jar;jul-ecs-formatter.jar
  4. 以这种方式编辑tomcat/conf/logging.properties :
handlers = java.util.logging.ConsoleHandler
.handlers = java.util.logging.ConsoleHandler
...
java.util.logging.ConsoleHandler.formatter = co.elastic.logging.jul.EcsFormatter
Run Code Online (Sandbox Code Playgroud)

这样的配置将使 tomcat 以适当的 Elastic (Logstash) JSON 格式将所有事件写入控制台 (stdout),这在 docker 或其他容器中运行时非常适合。

文档https://www.elastic.co/guide/en/ecs-logging/java/1.x/setup.html


Alf*_*heo 3

我会做以下事情:

  1. 下载并构建devatherock 的 jul json 格式化程序
  2. 下载json-simple
  3. 将两者添加到 $CATALINA_BASE/bin/setenv.sh 脚本中的 tomcat 启动类路径中
  4. 在 $CATALINA_BASE/conf/logging.properties 中,添加或更改日志处理程序的格式化程序以io.github.devatherock.json.formatter.JSONFormatter