The main difference between wire and logic is how they behave in the following case:
wire a = b;
logic a = b;
The first case is equivalent to a continuous assignment:
wire a;
assign a = b;
The second case is equivalent to initialization at time 0:
logic a;
initial a = b;
Note that in the second case logic behaves just like reg:
reg a;
initial a = b;
Interestingly enough, this difference is not covered in many tutorials and even senior engineers are frequently not aware of it.