ContourPlot[f[x, y], {x, -2, .5}, {y, -2, 2},
Contours -> ((contours = FindDivisions[{#, #2}, #3, Method -> {}]) &)];
Plot3D[f[x, y], {x, -2, .5}, {y, -2, 2}, PlotPoints -> 100,
MeshFunctions -> {#3 &}, Mesh -> {contours}, Ticks -> None]

Jason's approach, extracting Tooltip labels form ContourPlot output, is straightforward and convenient.
For the curious, how ContourPlot picks a nice set of curves as level curves by default remains a puzzle.
Speaking of "nice", searching for "nice numbers" in the Documentation Center gives:

See also: Google Search: wolfram documentation "nice" numbers.
Documentation >> FindDivisions:
Documentation >> Contours:

After a few trials, we find that the function FindDivisions[{#, #2}, #3, Method -> {}]& (where the first two arguments are $z_{min}$ and $z_{max}$ and the last argument is the number of divisions which is fixed at 10) as the setting for Contours gives the same output as the default setting for this option.
Some examples:
ContourPlot[Cos[x] + Cos[y], {x, 0, 4 Pi}, {y, 0, 4 Pi}] ==
ContourPlot[Cos[x] + Cos[y], {x, 0, 4 Pi}, {y, 0, 4 Pi},
Contours -> (FindDivisions[{#, #2}, #3, Method -> {}] &)] ==
ContourPlot[Cos[x] + Cos[y], {x, 0, 4 Pi}, {y, 0, 4 Pi},
Contours -> (FindDivisions[{#, #2}, 10, Method -> {}] &)]
True
rr = RandomReal[5, 2];
ContourPlot[Evaluate[Sum[Sin[rr.{x, y}], {5}]], {x, 0, 5}, {y, 0, 5}] ==
ContourPlot[Evaluate[Sum[Sin[rr.{x, y}], {5}]], {x, 0, 5}, {y, 0, 5},
Contours -> (FindDivisions[{#, #2}, #3, Method -> {}] &)]
True
So for OP's example, we can extract the default contour levels using this function as follows:
f[x_, y_] := Log[(1 - x)^2 + 100 (y - x^2)^2];
cp1 = ContourPlot[f[x, y], {x, -2, .5}, {y, -2, 2}];
levels = Cases[cp1, Tooltip[_, t_]:>t, Infinity];
cp2 = ContourPlot[f[x, y], {x, -2, .5}, {y, -2, 2},
Contours -> ((contours = FindDivisions[{#, #2}, #3, Method -> {}]) &)];
cp1 === cp2
True
levels == Reverse@contours
True
Tooltips – Jason B. Dec 13 '17 at 17:49