Java 使用<;蚂蚁>;任务重置调用方的日志记录配置
两个项目:产品(项目A)和汽车基准项目(项目B) 在B的构建文件中,我们需要调用A的构建文件来运行与app server的构建和捆绑过程,如下所示: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的构建文件期
<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日志记录设置请注意,我无法修改项目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”删除或使其为真来进行检查。检查一下。