【问题标题】:1 server 2 Tomcat 1 docbase 1 logfile - can this setup cause logs missing?1 服务器 2 Tomcat 1 docbase 1 日志文件 - 此设置会导致日志丢失吗?
【发布时间】:2017-03-12 22:58:41
【问题描述】:

背景

  • 1 个服务器
  • 运行 2 个 tomcat8
  • 为两个 tomcat 使用 1 个相同的文档库
  • 为两个 tomcat 使用 1 个相同的 log4j2.properties

我发现一些事务日志随机丢失,使用同一源从两个不同的应用程序编写单个日志文件是不好的做法吗?

例如,如果有 60,000 个 API 调用,那么可能会丢失大约 5 个调用或更多日志。

我可以告诉“缺少事务”,因为我可以从数据库中找到 API 请求/响应,但没有该事务的日志。

【问题讨论】:

    标签: java tomcat logging


    【解决方案1】:

    当我更多地考虑这个设置时, 这是个坏主意,因为

    • 两个应用程序写入一个日志文件,会使用 log4j 损坏该文件(参考:https://stackoverflow.com/a/23998294/1042903
    • 即使这不是问题,滚动文件仍然存在问题,两个不同的应用程序会竞争滚动单个日志文件。

    最终,我必须分离文档库并编写单独的日志文件,然后使用 LogStash 或其他一些日志框架在一个地方查看它们。

    Ref: 有人要求 Log4j2 的 Logback 谨慎模式 (https://issues.apache.org/jira/browse/LOG4J2-1828)

    之后,

    1. 我更改了 catalina.sh 脚本以添加 jvm 选项,该选项将为每个 tomcat 包含不同的目录或日志文件名
    2. 还可以更改 log4j2.properties 以使用 ${sys:option_name} 访问 jvm 参数
    3. 重启每个tomcat,看看option是否设置正确

    参考:https://logging.apache.org/log4j/2.0/manual/lookups.html#JmxRuntimeInputArgumentsLookup

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2018-09-04
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 2015-07-03
      • 2021-06-11
      相关资源
      最近更新 更多