QuickFIX/J如何将fromApp接收的日志输出到文本文件或Swing TextArea
解决方案
基础逻辑
QuickFIX的Message类已原生重写toString()方法,直接调用即可拿到完整的FIX报文原始字符串,无需额外解析转换。
分场景实现代码
你可以根据需求在fromApp方法中加入以下逻辑:
转String存入变量
直接调用toString即可,要注意多线程场景下存储到全局变量/集合时要加同步锁:
String fixLogContent = message.toString(); // 后续可以自由存入自定义变量、内存队列等结构输出到本地文本文件
建议用追加写入的方式,可搭配时间戳方便日志回溯:
// 可把BufferedWriter提取为全局复用对象,避免频繁IO try (BufferedWriter writer = new BufferedWriter(new FileWriter("pricing_logs.log", true))) { // 加时间戳前缀 String logLine = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + " | " + message + "\n"; writer.write(logLine); } catch (IOException e) { e.printStackTrace(); }输出到Swing的JTextArea组件
Swing组件只能在事件调度线程(EDT)中更新,必须用
SwingUtilities.invokeLater包裹更新逻辑,否则会出现界面卡顿、渲染异常等问题:// 假设你的TextArea组件实例名为pricingLogTextArea SwingUtilities.invokeLater(() -> { // 追加日志到末尾 pricingLogTextArea.append(message + "\n"); // 自动滚动到最新行 pricingLogTextArea.setCaretPosition(pricingLogTextArea.getDocument().getLength()); });
可选优化
如果需要提取特定字段而非全量报文,可以直接通过标签号取值:
// 示例:提取35号(消息类型)、55号(合约代码)字段值 String msgType = message.getString(35); String symbol = message.getString(55);
内容的提问来源于stack exchange,提问作者Beanie
相关产品推荐
相关产品推荐

