The contract is for $33 million, a source told ESPN.com.
Lohse has an opportunity to earn an additional $1 million in performance bonuses, according to the source.
Lohse's contract agreement was earlier reported by CBSSports.com.
"Kyle is coming off two very good years, and his experience and competitiveness will be welcomed by the club," said Brewers general manager Doug Melvin in a release. "This signing makes us a better club today than we were yesterday."
Lohse, 34, was the only top-tier player left on the free-agent market. He posted a 16-3 record and a 2.86 ERA for the St. Louis Cardinals last season, pitching a career-high 211 innings. He has a career 118-109 record and 4.45 ERA in 12 seasons with Minnesota, Cincinnati, Philadelphia and St. Louis.
Lohse declined a $13.3 million qualifying offer from St. Louis over the winter and encountered a slow free-agent market, in part because potential suitors were hesitant to part with draft pick compensation in exchange for signing him. The Brewers will reportedly surrender the 17th pick in the upcoming June draft, along with the bonus money that Major League Baseball allots to that spot.
Lohse slides in behind Yovani Gallardo to give Milwaukee a proven innings eater in the rotation. Melvin has said for months that the Brewers planned to go with their young pitchers this season and refrain from signing a big-ticket free agent. But the Brewers were forced to re-assess their situation when Wily Peralta (5.74 ERA), Mike Fiers (6.98) and Mark Rogers (7.00) all struggled in the Cactus League.