System

The Log Viewer component’s system logs offer insights into the entire system, including trade execution, connection status, alerts, warnings, margin percentage, among other details.
This section concentrates on the trade execution messages, so that you can follow an order through the stages of its execution. Every line starts with the UTC date and time, to the millisecond, and the level, followed by a message tag. Once a minute the engine also writes a stats: orders=<n> quotes=<n> line with the number of orders and quote updates it processed during that minute.
The following tags describe order processing, including fills, rejections and cancellations:
| Tag | Level | When it is written |
|---|---|---|
order_open |
INFO | The order was accepted and its execution parameters were resolved. |
bid_book / ask_book |
INFO | The aggregated books captured when a leg opens. They can also be written when an order closes without opening a leg, provided a pool book is available and the order did not fail a margin check. |
leg_open |
INFO | A leg was sent to a Liquidity Provider or booked internally. |
deal_done |
INFO | A Liquidity Provider confirmed a fill for a leg. |
leg_close |
INFO | The leg completed. |
order_close |
INFO | The order completed. Orders that end unfilled because of a rejection or a failed margin check are written at WARN level with the extended layout described below. |
order_reject |
WARN | The order was rejected before execution started. |
order_cancel |
INFO | A cancel request was processed. |
order_open
order_open : <order>: <connector type>|<connector>: account=<connector account> clOrdID=<id> [subID1=<v>] [subID2=<v>] [subID3=<v>] [subID4=<v>]: side=<BUY|SELL> type=<MARKET|LIMIT|STOP> instrument=<connector instrument> symbol=<security type>|<symbol>|<size unit>|<price unit>[|<factor>] size=<requested>|<A-book>|<B-book> minsize=<n> price=<n> dev=<n> ttl=<ms> PRICE[bid[maker=<n>,taker=<n>],ask[maker=<n>,taker=<n>]] LQ[pool=<pool>,mode=<mode>,boost=<n>,profile=<markup profile>] MARKUP[fix[layer=<n>,type=<type>,bid=<n>,ask=<n>,skew=<n>],flex[type=<type>,min=<n>,max=<n>,exec=<mode>,precision=<n>]] [LOCK[ref_price=<type>,mode=<mode>,unit=<unit>,gain=<n>,loss=<n>,dev=<true|false>]] A-BOOK[min=<n>,step=<n>,delay=<ms>] B-BOOK[bbook=<n>,lock=<n>,bob=<n>,boost=<n>,delay=<ms>,jitter=<ms>]
| Field | Explanation |
|---|---|
<order> |
XCore order ID. |
<connector type>|<connector> |
Type and name of the Connector that sent the order. |
| account | The connector account that hosts the execution settings, such as the liquidity pool, the markup profile and the A-book and B-book parameters. |
| clOrdID | Client order ID. |
| subID1 to subID4 | The sub IDs of the order, shown only when present. For MT4 and MT5 connectors subID3 is the login; subID4 is the MT4 order ticket or the MT5 position ID. |
| side, type | Order side and order type. |
| instrument | Symbol name on the connector side. |
| symbol | Security type, XCore symbol, size unit and price unit of the symbol. A contract factor is appended when it differs from 1. |
| size | Requested size, followed by the part routed to the A-book and the part kept in the B-book. |
| minsize, price, dev, ttl | Minimum fill size, requested price, maximum price deviation (-1 = unlimited) and time to live in milliseconds. |
| PRICE | Bid and ask at the time of the order. maker is the aggregated provider price, taker the price after markups. |
| LQ | The liquidity pool, its mode and boost, and the markup profile applied. |
| MARKUP | The fixed markup layer (layer index, type, bid and ask markups, skew) and the flexible markup settings (type, minimum and maximum spread, execution mode, precision) that applied. |
| LOCK | Trade lock settings, present when a trade lock applies to the order. |
| A-BOOK | The a_min, a_step and a_delay settings of the connector account symbol. |
| B-BOOK | The b_book, b_lock, b_bob, b_boost, b_delay and b_jitter settings of the connector account symbol. |
bid_book and ask_book
ask_book : <order>[_<leg>]: <pool>|<markup profile>: <layer>|<maker>|<raw price>[|<book price>]|<taker price>|<size>|<size>|<quote ref>|<time>|<age>, ...[: FILTER_BEST=<p>, FILTER_WORST=<p>, MARKUP_MIN=<p>, MARKUP_MAX=<p>, SPREAD_MIN=<p>, SPREAD_MAX=<p>, SPREAD_MODE=<mode>]
| Field | Explanation |
|---|---|
<order>_<leg> |
Order and leg the book was captured for. Books written at order close carry the order ID only. |
<pool>|<markup profile> |
Liquidity pool and markup profile the book was built from. |
| layer | Position in the aggregated book; 0 is the top of book. |
| maker | Liquidity Provider that streamed the layer. |
| raw price | Price as received from the provider. |
| book price | Price after the provider markups, shown only when it differs from the raw price. |
| taker price | Price after all markups, as offered to the client. |
| size, size | Size of the layer, followed by the size booked internally for B-book legs or the minimum size for A-book legs. |
| quote ref | Quote reference received from the provider, n/a when the provider sends none. |
| time | Time XCore received the quote, in epoch milliseconds. |
| age | Milliseconds between the provider’s timestamp and the receipt of the quote in XCore. |
| suffix | Filter best and worst prices, markup and spread limits and the spread mode, shown when they constrained this book. |
leg_open
leg_open : <order>_<leg>: <provider type>|<provider>: batch=<n> b_book=<0|1> acc=<account> clordid=<id> type=<MARKET|LIMIT|PQ> instrument=<provider instrument> size=<n> minsize=<n> price=<n> ttl=<ms> MARKUP[lp=<n>,fix=<n>,skew=<n>,flex=<n>] QUOTE[pos=<layer>,ref=<quote ref>,time=<ms>,age=<ms>]
| Field | Explanation |
|---|---|
<order>_<leg> |
Order ID and leg ID. |
<provider type>|<provider> |
Type and name of the Liquidity Provider. |
| batch | Attempt number; a leg that is rejected is retried as a new batch. |
| b_book | 1 for legs booked internally (B-book and cross-hedge legs), 0 for legs sent to a provider. |
| acc | Account tag sent to the provider. |
| clordid | Client order ID sent to the provider; by default <order>-<leg>, or SA-<order>-<leg> for Synthetic A-book legs. |
| type | Leg type: market, limit or previously quoted (PQ). |
| instrument | Symbol name on the provider side. |
| size, minsize, price, ttl | Requested size, minimum fill size, requested price and the remaining time to live in milliseconds. |
| MARKUP | Provider markup, fixed markup, skew and flexible markup applied to the leg. For sell orders the values are shown with the sign inverted. |
| QUOTE | Position of the selected quote in the book, the provider’s quote reference, the time XCore received the quote (epoch milliseconds) and its age when the leg opened. |
deal_done
deal_done : <order>_<leg>_<deal>: size=<n> maker_price=<n> taker_price=<n> [ref_price=<n>] ordID=<provider order id> execID=<provider execution id> vd=<value date> [text=<provider text>] conv=<rate> MARKUP[flex=<n>,lock=<n>]
| Field | Explanation |
|---|---|
<order>_<leg>_<deal> |
Order ID, leg ID and deal ID. |
| size | Deal fill size. |
| maker_price | Price confirmed by the provider. |
| taker_price | Price after the provider, fixed, flexible and lock markups. |
| ref_price | Reference price, shown when one applied. |
| ordID, execID | Order ID and execution ID assigned by the provider. |
| vd | Value date received from the provider. |
| text | Execution message from the provider, shown when present. |
| conv | Conversion rate to USD at the time of the deal. |
| MARKUP | Flexible and lock markup components of the deal. For sell orders the values are shown with the sign inverted. |
leg_close
leg_close : <order>_<leg>: fillSize=<n> fillPrice=<provider price>|<client price>[: maker_slippage=<n> | maker_improvement=<n>] [taker_slippage=<n> | taker_improvement=<n>] [maker_trade_setting.rejectCount=<n>]
| Field | Explanation |
|---|---|
| fillSize | Leg fill size, the sum of the confirmed deals. |
| fillPrice | Fill price confirmed by the provider, followed by the price after markups. |
| maker_slippage / maker_improvement | Difference between the requested leg price and the provider fill price, as an absolute price difference, shown when it is not zero. |
| taker_slippage / taker_improvement | Difference between the requested order price (or the order-time price, when no price was requested) and the client fill price, shown when it is not zero. |
| maker_trade_setting.rejectCount | Number of rejections recorded against the provider trade setting, shown when it is not zero. |
order_close
Filled orders:
order_close: <order>: fillSize=<n> fillPrice=<raw>|<client price>[: slippage=<n> | improvement=<n>] [message=<text>] [exec=<details>] [taker_trade_setting.rejectCount=<n>]
Unfilled orders (WARN):
order_close: <order>: <connector type>|<connector>: account=<connector account> [margin=<n>] clOrdID=<id> [subid1=<v>] [subid2=<v>] [subid3=<v>] [subid4=<v>] side=<side> ordType=<type> [posType=<type>] instrument=<instrument> currency=<ccy> size=<n> minsize=<n> price=<n> deviation=<n> ttl=<ms> time=<ms>[: message=<reason>] [exec=<details>] [rejectCount=<n>]
| Field | Explanation |
|---|---|
| fillSize | Order fill size reported to the client, the sum of the leg fill sizes. |
| fillPrice | Volume-weighted fill price before and after markups. |
| slippage / improvement | Difference between the requested price (or the order-time price) and the client fill price, shown when it is not zero. |
| message | Execution message; for unfilled orders the rejection reason. |
| margin | Margin value, shown when the order failed the margin check. |
| exec | Execution details, when available. |
| rejectCount | Number of consecutive rejections recorded against the taker trade setting, shown when it is not zero. |
order_reject
order_reject: <order>: <connector type>|<connector>: account=<connector account> clOrdID=<id> [subID1=<v>] [subID2=<v>] [subID3=<v>] [subID4=<v>]: side=<side> type=<type> instrument=<instrument> symbol=<security type>|<symbol>|<size unit>|<price unit>[|<factor>] size=<requested>|<A-book>|<B-book> minsize=<n> price=<n>: <reason> [rejectCount=<n>]
The fields are those of order_open, followed by the rejection reason.
Example
A market order filled by one maker:
2026-09-23 12:48:01.487 [INFO ] order_open : 461: PRIMEXM_FIX44_V2|fix_taker: account=DEMO clOrdID=ORD-1001: side=BUY type=MARKET instrument=EURUSD symbol=FX|EURUSD|0.01|0.00001 size=1000.0|1000.0|0 minsize=0 price=0 dev=-1.0 ttl=5000 PRICE[bid[maker=1.10001,taker=1.10001],ask[maker=1.10049,taker=1.10049]] LQ[pool=DEMO,mode=sweep,boost=1,profile=DEMO] MARKUP[fix[layer=0,type=price_unit,bid=0,ask=0,skew=0],flex[type=price_unit,min=-1000000.0,max=1000000.0,exec=slip,precision=default]] A-BOOK[min=1.0,step=1.0,delay=0] B-BOOK[bbook=0.0,lock=0.0,bob=0.0,boost=1.0,delay=0,jitter=0]
2026-09-23 12:48:01.487 [INFO ] leg_open : 461_0: PRIMEXM_FIX44|Maker_1: batch=0 b_book=0 acc=n/a clordid=461-0 type=MARKET instrument=EUR/USD size=1000.0 minsize=0 price=1.10049 ttl=60 MARKUP[lp=0,fix=0,skew=0,flex=0] QUOTE[pos=0,ref=n/a,time=1790167681486,age=1]
2026-09-23 12:48:01.487 [INFO ] ask_book : 461_0: DEMO|DEMO: 0|Maker_1|1.10049|1.10049|500000.0|0|n/a|1790167681486|0, 1|Maker_1|1.10051|1.10051|1000000.0|0|n/a|1790167681486|0
2026-09-23 12:48:01.487 [INFO ] bid_book : 461_0: DEMO|DEMO: 0|Maker_1|1.10001|1.10001|500000.0|0|n/a|1790167681486|0, 1|Maker_1|1.09999|1.09999|1000000.0|0|n/a|1790167681486|0
2026-09-23 12:48:01.487 [INFO ] deal_done : 461_0_0: size=1000.0 maker_price=1.10047 taker_price=1.10047 ordID=MK-ORD-1 execID=MK-EXEC-1 vd=20260925 conv=1.10047 MARKUP[flex=0,lock=0]
2026-09-23 12:48:01.487 [INFO ] leg_close : 461_0: fillSize=1000.0 fillPrice=1.10047|1.10047: maker_improvement=0.00002 taker_improvement=0.00002
2026-09-23 12:48:01.487 [INFO ] order_close: 461: fillSize=1000.0 fillPrice=1.10047|1.10047: improvement=0.00002