我使用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');
}
}
'红宝石记录器的消息输出到my_log.log。
'信息:当我运行Rake任务时,将向控制台输出Java记录器'的消息。
我无法修改Java代码。如何将来自Java函数的消息保存到文件中?
我尝试了rake my:task > java_log.log
,但这只捕获了Rails生成的控制台输出。
我正在使用JRuby 1.7.16和Rails 4.1.4。
答案 0 :(得分:0)
我不确定是否会对我的代码产生任何影响,因为涉及到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]);
}