在 Jenkins 日志之外记录 Jenkins 操作



我想在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 容器中的文件中,那也没关系。

谢谢!

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

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;
}

文档在这里解释了这一点(在Groovy中,但语法在Java中是相同的,除了分号在行尾(。

如果您使用要编写日志的上下文更新问题(插件?自定义钩子?那么也许我们可以帮助您获得更具体的问题的答案。另外,请透露一些您的真实代码,并告诉我们您卡在哪里。

最新更新