java - Tomcat(8.0.32) lib 目录中的 HikariCP(2.4.6) 不记录

标签 java tomcat logging tomcat8 hikaricp

虽然当 hikari(2.4.6) jar 捆绑在应用程序的 war 中时日志记录工作得很好,但当我们将它移动到 Tomcat(8.0.32) /lib 时目录,hikari 停止记录。我在 hikaricp github (809) 中关注了类似的问题在实现这一目标方面有一些指导,但我无法让它发挥作用。对于我们的应用程序,监控池非常重要:

2017-02-01 12:27:17.274 DEBUG 26240 --- [l-1 管家] com.zaxxer.hikari.pool.HikariPool:HikariPool-1 - 池统计(总数=10, Activity = 0, 空闲=10, 等待=0)

所以我们需要一种方法在 catalina.out

中获取此信息

我的 tomcat 设置如下:

/lib目录:

image

和我的logging.properties:

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = FINEST
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.

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.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter




############################################################
# 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

# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE

# To see debug messages in TldLocationsCache, uncomment the following line:
#org.apache.jasper.compiler.TldLocationsCache.level = FINE

com.zaxxer.hikari.level = FINEST
com.zaxxer.hikari.handlers = 1catalina.org.apache.juli.AsyncFileHandler

请向我提供一些有关如何使其正常工作的信息。 非常感谢

最佳答案

解决方法:

首先,必须将tomcat服务器内部日志记录从Apache Commons Logging改成至 log4j .描述了执行此操作的过程 here . 假设已阅读上面的链接并从 extras 包中下载上述 jar(tomcat-juli-adapters.jartomcat-juli.jar )

  • log4j.properties 文件应该放在tomcat/lib 目录下。
  • tomcat/conf 目录中删除或重命名 logging.properties 文件,这样 tomcat 就不会在启动时获取它。<
  • 将以下 jar 复制到 tomcat/lib 目录:log4j-1.2.17.jartomcat-juli-adapters.jar
  • 将以下 jar 复制并替换到 tomcat/bin 目录:tomcat-juli.jar

完成上述步骤后,tomcat 现在应该使用 log4j 进行日志记录。

要启用 HikariCP 日志记录,请执行以下操作:

  • 编辑 log4j.properties 文件并在末尾添加以下行: log4j.logger.com.zaxxer.hikari = DEBUG
  • 确保以下 jar 存在于 tomcat/lib 目录中:
    • HikariCP-2.4.6.jar
    • jcl-over-slf4j-1.7.21.jar
    • slf4j-api-1.7.21.jar
    • slf4j-log4j12-1.7.21.jar
    • jul-to-slf4j-1.7.21.jar

我的 log4j.properties 文件:

log4j.rootLogger = INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
  INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
  INFO, HOST-MANAGER

log4j.logger.com.zaxxer.hikari = DEBUG

关于java - Tomcat(8.0.32) lib 目录中的 HikariCP(2.4.6) 不记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42019040/

相关文章:

memory - 每个 webapp 内存设置的 Tomcat

java - 如何从 Log4j Logger/Appender 中排除单个类?

asp.net-mvc-3 - IIS 最大工作进程设置为 1,但会产生更多进程?

java - 如何解决错误 "android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1"

java - 将 JodaTime 中的持续时间转换为字符串

java - 如何在 Tomcat 中获取 org.apache.catalina.connector.Request 对象?

linux - BASEDIR 环境变量未正确定义

docker - 容器日志记录如何工作?

java - 导入具有特定命名和类路径要求的依赖项的正确方法?

java - 消息驱动 Bean 业务逻辑是否应该委托(delegate)给 EJB session Bean