Hoffman, who blew his last two chances, entered in the ninth inning Thursday with a three-run lead. Two flyballs eluded the Brewers for doubles, letting in a run, before baseball's career saves leader ended things by retiring Aramis Ramirez on a drive to deep center.
"Guys are playing their butts off out there. Things happen," Hoffman said after he had to throw 29 pitches to lock up Milwaukee's 8-6 victory. "Balls found little spots to land. You just have to continue to make pitches. It was important to get that win."
It was an unusually hot mid-April day in Chicago - 80 degrees at first pitch - and the wind was blowing out at 18 mph. The conditions caused extra nervousness for Brewers manager Ken Macha, whose team frittered away a three-run, eighth-inning lead Wednesday.
"With the wind blowing out, everybody was sitting on the edge of their seats," he said. "And I know right field here ... a terrible sun field."
With one out in the ninth, right fielder Corey Hart lost sight of Ryan Theriot's fly and the ball ended up behind Hart. Then, with two outs, Chad Tracy hit a popup that fell between Hart and second baseman Rickie Weeks, each of whom got a late jump.
"You can't take anything for granted," Brewers third baseman Casey McGehee said. "Those popups look innocent ... then all of a sudden they turn into an adventure."
McGehee and Ryan Braun each homered and drove in three runs. Weeks singled home the tiebreaking run in the seventh as the Brewers overcame home runs by Derrek Lee, Marlon Byrd and Ramirez and avoided a three-game sweep.
It was 5-all in the seventh when pinch-hitter Joe Inglett drew a two-out walk from Jeff Samardzija (0-1), stole second and scored on Weeks' single. Weeks, who underwent season-ending wrist surgery last May 20 and had two disappointing years before that, has at least one hit in every game this season.
After Carlos Villanueva struck out the side in the Chicago seventh, Braun led off the eighth with a homer off Samardzija. Braun, who also singled three times, has 26 RBI in 26 games at Wrigley Field.
Cubs starter Carlos Zambrano and Milwaukee's Jeff Suppan each allowed four runs in five innings.
Zambrano labored, throwing 121 pitches, giving up eight hits and walking three. Though he got cramps in his calf and right index finger in his final inning, he said the wind was a far bigger hindrance.
"I've been here for eight years," he said, "and I know that I have to keep the ball down when the wind's blowing out."
The $91.5 million right-hander, coming off a nine-win season, actually lowered his ERA to 9.45.
Cubs manager Lou Piniella is more concerned about a relief corps that has a 6.41 ERA after Samardzija allowed two runs and Sean Marshall and John Grabow let in one apiece.
"It's hard to win when the other team keeps adding runs," Piniella said. "The bullpen's got to tighten it up."
Suppan, activated from the disabled list before the game, yielded six hits and a walk. He was relieved by Chris Narveson (1-0), who gave up Ramirez's tying homer in the sixth.
The Brewers sent LHP Mitch Stetter to Triple-A Nashville to make room for Suppan. ... Lee, who became the 10th player to hit 100 homers at Wrigley, was ejected in the seventh for arguing umpire Angel Campos' strike-three call. ... Chicago LHP Ted Lilly (offseason shoulder surgery) said after throwing 51 pitches in Wednesday's rehab start that he'd like his next outing to be with the Cubs. But manager Lou Piniella said Thursday he wants Lilly to make a longer minor league start before rejoining the rotation in late April. ... Brewers C Gregg Zaun had three hits after starting the season 1 for 22. ... The Cubs have led in each of their first nine games. They last had such a streak in 1945, which also was the last time they went to the World Series. ... Byrd's homer was his third. While with Texas last season, he didn't hit his third until May 29.