将 log4j 更改为 Cassandra 的 logback?

Changing log4j to logback for Cassandra?

我们有一个由我们的开发人员创建的 java 应用程序,我被要求进行负载平衡,这个应用程序基本上从我们的 Web 前端获取查询,查询我们的 Cassandra 后端,并且 returns结果返回到前端。

就平衡而言,我已经通过 Nginx/round robin 设置了所有内容,但是我正在尝试找出设置日志记录的最佳方法,因为此应用程序的每个实例(运行 在个别机器上)将记录它负责的任何 activity。

一个可能的解决方案是通过 NFS 共享一个中央日志文件,并允许所有节点写入它。问题是我们正在使用 log4j,经过一些研究(和一些测试)后,我发现存在一些问题,各种日志条目被删除 off/corrupted,所以我开始寻找解决方案。我读过 logback classic 可以在 "prudent" 模式下使用,这将允许节点在写入时锁定日志。

我的问题是 how/can 无需重写我们的代码即可实现(我不是开发人员)?我知道我们日志记录的配置文件在哪里,我也知道 log4j-1.2.17.jar 和 slf4j-log4j12-1.7.2.jar 文件在哪里(与我们的应用程序相关)。

是否有一种简单的方法可以切换到 logback,或者这是否需要在应用程序本身中进行修改?

PS 我总是可以让每个实例创建自己的日志,但我希望我能找到一种方法让它们使用相同的日志文件

您可以让 log4j 写入 slf4j,后者将写入 logback。在您的类路径中,您将需要 log4j-over-slf4j-xxx.jar、logback-classic-xxx.jar、logback-core-xxx.jar、slf4j-api-xxx.jar.然后配置 logback (logback.xml) 以使用适当的附加程序。

http://logback.qos.ch/manual/configuration.html

SLF4J 手册有 a page dedicated 这个主题。简而言之,log4j-over-slf4j 会将对 log4j API 的调用重定向到 SLF4J,然后再将其发送到 logback。请注意,您不需要编写任何代码来实现这些重定向。

至于你的log4j配置文件,有一个online tool把log4j.properties转换成logback.xml。