Because the log function in the objective function can not process complex number, which directly code with it will result in Illegal operation: log( {complex affine} ).

So I wonder how to deal with the convex optimization problem?

Neither argument of trace1 is real, even if B_k and C_k are Hermitian semidefinite. So the problem as stated doesn’t seem to make any sense, and that would still be the case with any optimization tool, convex/DCP or otherwise. The objective function must evaluate to a real scalar, but this objective function evaluates to a complex scalar.

The problem might make sense if real(...) were applied inside or outside of trace(...). and CVX would accept it. But I don’t know that that is the proper resolution here. It is “your” problem, in the sense that you found it in a paper or book, so it is your responsibility to understand and clarify the formulation so that it makes sense as an optimization problem - among other things, that requires the objective function to evaluate to a real scalar.