Logging apachespark日志重定向WebSphere日志输出

Logging apachespark日志重定向WebSphere日志输出,logging,apache-spark,websphere,slf4j,Logging,Apache Spark,Websphere,Slf4j,出于测试目的,我希望在WebSphereApplicationServer上以本地模式运行Spark。问题是,一旦本地spark上下文初始化,它就会通过spark logger重定向WebSphere服务器内的所有日志记录 我所说的“重定向”是指:所有日志行,无一例外,不管是哪个WebSphere组件或应用程序,都根据WebSphere日志记录到SystemErr。在每条记录的消息上,您可以在实际日志消息之前看到另一个时间戳、日志级别和记录器名称 从其他问题中,我发现WebSphere和Spar

出于测试目的,我希望在WebSphereApplicationServer上以本地模式运行Spark。问题是,一旦本地spark上下文初始化,它就会通过spark logger重定向WebSphere服务器内的所有日志记录

我所说的“重定向”是指:所有日志行,无一例外,不管是哪个WebSphere组件或应用程序,都根据WebSphere日志记录到SystemErr。在每条记录的消息上,您可以在实际日志消息之前看到另一个时间戳、日志级别和记录器名称

从其他问题中,我发现WebSphere和Spark都在内部使用SLF4J。如何防止Spark中的SLF4J通过自身重定向来自其他应用程序的所有日志


我使用的是WebSphere Application Server v8.5.5.6和Apache Spark v1.4.1 CHD4二进制发行版。

我猜带Spark的slf4j正在配置根记录器(例如slf4j桥接处理程序),它将所有JUL记录器输出路由到slf4j,然后slf4j将日志记录到System.err

自由需要和使用七月(除了我们自己)。任何干扰根JUL日志处理程序的事情都会干扰Liberty的日志记录(谢谢JVM单例)。看起来ApacheSpark假设/强制使用log4j,并假设它也应该在整个七月路由log4j

您需要配置log4j以不同的方式处理Liberty消息,或者与ApacheSpark搏斗(可能在那里做一些修改)以允许使用JUL(Liberty随后通过server.xml配置管理)

或者根据本文修改slf4j(logback.xml)配置:
以下方法似乎解决了我的日志记录问题:

  • 删除Spark jar文件中
    org
    文件夹下的
    slf4j
    文件夹。(任何用于修改ZIP文件的标准工具都可以在这里使用。)
  • 除了修改过的Spark jar之外,还将SLF4J的API和JDK14 jar作为库添加到web应用程序中
  • (老实说,我在配置Spark的日志记录方面没有投入太多额外的精力,我的方法可能有点生硬,但它是有效的。)

    上述步骤成功地防止Spark接管WebSphere日志记录。相反,所有Spark生成的日志都由WebSphere按原样处理


    当然,这无法解决其他缺陷,例如Spark只允许每个JVM使用一个SparkContext(并且WebSphere节点上的所有应用程序都在一个JVM中运行),因此这种设置将继续仅用于测试目的。

    Hi,您使用的是Liberty还是classic WebSphere?这将是“经典”WebSphere,绝对不是Liberty。谢谢,我明天再看。我曾希望我可以不费吹灰之力就让它工作,所以我希望我可以说服它做我想做的事情,而不必自己编译它。