gpt4 book ai didi

java - 如何将 Java 日志消息保存到像 Rails 日志消息一样的文件中?

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:54 24 4
gpt4 key购买 nike

我使用 JRuby 并有一个调用 Java 函数的 Rake 任务。此 Rake 任务使用 ActiveSupport::Logger 来记录消息。

log = ActiveSupport::Logger.new('log/my_log.log')
log.info 'A message for the ruby logger'

后来我调用了一个Java函数。

obj = JavaThing.new
results = obj.callJavaFunction

然后,callJavaFunction() 方法会执行一些自己的日志记录。

public class JavaThing {
private static final Logger log = Logger.getLogger('com.stuff.thing');

public void callJavaFunction() {
// do stuff
log.info('A message for the Java logger');
}
}

“Ruby 记录器的消息” 输出到 my_log.log。

“信息:Java 记录器的消息” 当我运行 Rake 任务时输出到控制台。

我无法修改Java代码。如何将来自 Java 函数的消息保存到文件中?

我尝试过 rake my:task > java_log.log 但这只能捕获 Rails 生成的控制台输出。

我正在使用 JRuby 1.7.16 和 Rails 4.1.4。

最佳答案

由于涉及 Ruby(没有这方面的经验),我不确定是否会对我的代码产生任何影响,但您可以尝试以下操作。请注意,我最初将其编写为 JUnit 日志记录测试的一部分(使用 @Before),因此您需要进行一些调整才能适合您的情况。

基本上,它所做的是将日志记录从控制台定向到 txt 文件(本例中为 Logging.txt)。它仍然会打印到控制台。

private final static Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
public void loggerSetup() {
try {
fileTxt = new FileHandler("Logging.txt");
} catch (SecurityException | IOException e) {
logger.warning("Filehandler not functional");
}
logger.addHandler(fileTxt);
SimpleFormatter formatterTxt = new SimpleFormatter();
fileTxt.setFormatter(formatterTxt);
}

如果您还想删除控制台打印,类似于下面的内容可能会起作用。所有日志记录将仅保存在文件中,因为控制台打印将被覆盖并发送到文件中。

Logger rootLogger = Logger.getLogger("");       
Handler[] handlers = rootLogger.getHandlers();
if (handlers[0] instanceof ConsoleHandler) {
rootLogger.removeHandler(handlers[0]);
}

关于java - 如何将 Java 日志消息保存到像 Rails 日志消息一样的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com