You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:24:01