Sweeney was set to hit the open market when the offseason officially started on Nov. 1, but has opted for guaranteed money instead.
The new contract will pay Sweeney $1.5 million in both 2014 and 2015, and gives the Cubs the option of paying him $2.5 million in 2016 or buying him out for $500,000.
Sweeney, 28, signed with the Cubs in early April after he was dropped from the Red Sox roster.
The oft-injured outfielder started the year with Chicago's Triple-A affiliate, but hit his way onto the active roster by the start of May.
The left-handed batting Sweeney thrived in limited action with the Cubs, hitting .266/.324/.448 with six home runs in 212 plate appearances -- most of which came against right-handed pitching.
He likely would have played a larger role in the outfield if it weren't for a rib injury he suffered slamming into the wall in late July.
His career .289/.344/.406 line against right-handers in parts of eight big-league seasons should make him a valuable asset to the Cubs as at least a platoon player. Sweeney also has a reputation as a solid defensive outfielder, so he can provide value there as well even if he starts to falter at the plate.