Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用<;蚂蚁>;任务重置调用方的日志记录配置_Java_Logging_Ant_Java.util.logging - Fatal编程技术网

Java 使用<;蚂蚁>;任务重置调用方的日志记录配置

Java 使用<;蚂蚁>;任务重置调用方的日志记录配置,java,logging,ant,java.util.logging,Java,Logging,Ant,Java.util.logging,两个项目:产品(项目A)和汽车基准项目(项目B) 在B的构建文件中,我们需要调用A的构建文件来运行与app server的构建和捆绑过程,如下所示: <ant antfile="${build-file-A}" inheritall="false" target="all" /> 在项目B中,我们有很多Ant任务,它们使用java.util.logging(JDK日志框架)输出消息 问题是,在该行之后,所有jdk记录器输出都会消失。 通过调试,我发现,在初始化项目A的构建文件期

两个项目:产品(项目A)和汽车基准项目(项目B)

在B的构建文件中,我们需要调用A的构建文件来运行与app server的构建和捆绑过程,如下所示:

<ant antfile="${build-file-A}" inheritall="false" target="all" />

在项目B中,我们有很多Ant任务,它们使用java.util.logging(JDK日志框架)输出消息

问题是,在该行之后,所有jdk记录器输出都会消失。

通过调试,我发现,在初始化项目A的构建文件期间,项目A中静态定义的东西将运行
LogManager.readConfiguration(InputStream)
,它加载一个配置文件,该文件只包含单个类的记录器配置

readConfiguration
期间,将调用
LogManager.reset()
重置期间
,将删除每个记录器的每个处理程序
。由于
将目标生成文件加载到调用者的同一进程,所有处理程序都将被删除

因此,除了已配置的类外,其他使用jdk logger的类都无法输出消息,因为缺少输出处理程序

我的问题是:

除了以下方法外,还有其他方法可以解决此问题:

  • 使用
    运行项目A的构建文件
  • 编写一个任务来运行
    readConfiguration()
    ,以便在调用
    后从默认配置文件恢复默认的JDK日志记录设置
  • 使用ant自己的日志框架(Task.log()等)

  • 请注意,我无法修改项目A以防止出现问题。

    您可以创建
    LogManager
    的子类,并覆盖
    reset
    和两个
    readConfiguration
    方法来安装所需的处理程序。然后使用
    java.util.logging.config.class
    系统属性在statup上安装自定义代码。

    您所说的“消失”到底是什么意思?@fge jdk logger的输出不会显示在控制台中——任务已成功执行,但没有输出。正如我所说,当格式化和输出日志消息的
    readConfiguration(InputStream)
    时,根日志记录器的控制台句柄将被删除。它们使用的是JDK日志记录的Ant任务,还是您定义的目标执行进行日志记录的Java程序?
    任务将构建文件加载到同一JVM中,作为另一个项目。而且,
    readConfiguration
    会影响JVM中所有现有的JDK记录器。我能想到的最好方法是在一个单独的JVM中运行另一个构建文件,但是当操作系统中有多个JDK和Ant安装时,
    任务可能会导致问题。我认为,但不确定您是否可以通过将inheritall=“false”删除或使其为真来进行检查。检查一下。