在Jenkins日志之外记录Jenkins操作

时间:2018-06-05 11:50:05

标签: java jenkins logging

我想在var / jenkins / logs(Jenkins的默认日志位置)之外的单独文件中记录一些INFO消息,但我找不到任何有用的示例。

登录Jenkins日志非常简单:

static final Logger LOGGER = Logger.getLogger([YOUR_CLASS_NAME].class.getName());
LOGGER.log(Level.INFO, [MESSAGE]);

但我不确定如何在单独的文件中记录消息。

非常感谢任何帮助!

回复后的附录

我想要记录的上下文是在我编写的自定义插件中,我基本上用我的自定义覆盖Jenkins中的默认比较器。根据某些标准,在构建队列中,作业被视为比其他作业更优先。

@Override
public int compare(Queue.BuildableItem lhs, Queue.BuildableItem rhs) {
    if (shouldBePrioritized(lhs) && !shouldBePrioritized(rhs)) {
        LOGGER.log(Level.INFO, "[BQP] Comparing " + lhs.task.getName() + "and " + rhs.task.getName() + ". Result: " + lhs.task.getName());
        return -1;
    }
    if (shouldBePrioritized(rhs) && !shouldBePrioritized((lhs))) {
        LOGGER.log(Level.INFO, "[BQP] Comparing " + lhs.task.getName() + "and " + rhs.task.getName() + ". Result: " + rhs.task.getName());
        return 1;
    }
    LOGGER.log(Level.INFO, "[BQP] Comparing " + lhs.task.getName() + "and " + rhs.task.getName() + ". Result: equal");
    return super.compare(lhs, rhs);
}

我目前使用这个LOGGER.log()将比较记录到Jenkins日志中,但我想将比较记录在运行Jenkins的Docker容器所在的VM上的单独文件中,但我相信这超出了问题的范围。现在,如果我设法将该信息记录在Jenkins容器中的文件中,那就没问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须为您获得的记录器添加自定义处理程序。

static final LOGGER = createLogger();

private static Logger createLogger() {
    Logger logger = Logger.getLogger(MyClass.class.getName());
    FileHandler handler = new FileHandler("/tmp/mylog.log", 1024 * 1024, 10, true); // You can use any variable as a first argument, including some constants from other classes too!
    handler.setFormatter(new SimpleFormatter());
    logger.addHandler(handler);
    return logger;
}

文档explains this here(在Groovy中,但Java中的语法相同,除了分号后面的行的结尾)。

如果您使用要编写日志的上下文(插件?Custom Hook?)更新您的问题,那么我们可以帮助您获得更具体的问题答案。另外,请透露一些您的真实代码并告诉我们您的位置。