<p>My application communicates with another system via IBM Websphere MQ. Sometimes no message comes into my queue but the other system said They already sent to me. So I want to know how to keep a history for all messages that arriving on my queue.</p>

Keep in mind that it may still be coming across the network as the MQ architecture may have many middle-ware queues.  Similarly, there's no requirement for a message to immediately get transmitted across a channel - the sender may batch up the messages and send them with a trigger.
The best way to ensure you log everything that arrives is to do this is with an interceptor queue.
This is the queue (let's call it A) that the channel writes to and, until this change, your application read from.  You then have a transfer process the reads from A, logs the message then writes it to the second queue (B).  This second queue is what your application now reads from.