Garcia will earn $20 million, according to multiple reports.
Garcia, 28, batted .282 with a career-high 20 home runs and 72 RBIs for the Tampa Bay Rays last season. He played in 125 games, and he provided depth and another strong defensive option in the outfield as Rays manager Kevin Cash juggled different alignments.
With 2018 National League MVP Christian Yelich in right, Garcia said he expects to play the other two outfield positions for the Brewers.
"Sometimes, I'm going to play center," Garcia said Tuesday. "Most of the time, I'm going to play left field. I'm OK with it."
As a result, Ryan Braun will play a bit at first base.
"Ryan's going to see some time at first base," general manager David Stearns said Tuesday. "He's open to it. He understands it. We certainly believe he can play over there at a good level, so that will be part of the rotation in 2020 but that will not be his exclusive position."
Milwaukee also signed corner infielder Ryon Healy to a one-year deal Tuesday. He could also be an option at first base. The 27-year-old Healy batted .237 with seven homers in 47 games last season with the Seattle Mariners.
Garcia gets a $500,000 signing bonus and salaries of $7 million next year and $10.5 million in 2021. The Brewers have a $12 million option for 2020 with a $2 million buyout, and the option would become mutual if Garcia has 550 plate appearances in 2021 or 1,050 in 2020 and '21 combined. If the option becomes mutual, Garcia would get a buyout if he declines it, the amount depending on plate appearances in 2020 and '21 combined: $500,000 for 601-800, $750,000 for 801-900, $1 million for 901-1,050, $1.5 million for 1,051-1,250 and $2 million for more than 1,250.
In five seasons with the Chicago White Sox, Garcia hit .271 with 74 home runs and 289 RBIs, including posting career highs in batting average (.330) and RBIs (80) in 2017, when he was an All-Star.
Knee and hamstring injuries limited him to just 93 games during his final season for the White Sox in 2018, but he reverted to his 2017 form last season and helped the Rays reach the American League Division Series for the first time since 2013.
Garcia, a native of Anaco, Venezuela, is from the same town as Brewers shortstop Orlando Arcia and played Little League ball with Orlando's brother, Oswaldo. Garcia is also friends with Brewers catcher Manny Pina.
"I think it's a great place to play baseball,'' Garcia said of Milwaukee. ``They are ready to compete, so that's what I liked. I like to win. That's the right team to go to.''
A seven-year veteran of the major leagues, Garcia has a career average of .273 with 96 home runs and 374 RBIs.
Milwaukee also announced it has signed infielder Jace Peterson to a minor league contract with an invite to major league spring training. Peterson batted .220 with two homers in 29 games with Baltimore last season.
The Associated Press contributed to this report.