Born in Copenhagen, Ludwig started his career in 1998 at Fremad Amager before moving to Tårnby Boldklub in 2005.[2] At age 15, he was signed by FC Midtjylland and attached to their youth academy in Ikast. Ludwig made his senior debut on 30 April 2011, at age 17, in a Danish Superliga match against AaB, which Midtjylland lost 0–2.[3]
Ludwig was signed by Vendsyssel FF in July 2012, which at that time still went under the name FC Hjørring.[4]
After he had established himself as a starter for the club, Vendsyssel offered him a new contract in 2014, but Ludwig declined.[5] As Ludwig's contract expired, clubs from the Superliga and Danish 1st Division were keen to sign him, but in the end he chose to sign with HB Køge, penning a three-year contract with the Danish second tier club.[6]
Ludwig made his debut for Køge in a 1–1 away draw against Skive IK on 25 July 2014.[7] He scored his first goal for the club two months later, netting the 1–1 equalizer the 84th minute in a home match against Brønshøj, before Bruninho scored the winner for Køge four minutes later.[8][9] Ludwig finished the season with 31 total appearances, in which he scored two goals.[1]
Ludwig had a bad start to his 2015–16 season, suffering a knee injury in the season debut against Lyngby Boldklub on 30 July 2015 which kept him out for two months.[10] He made his return to the starting eleven on 27 September, helping Køge advance in Danish Cup by scoring in a 2–0 win over AC Horsens.[11][12] In the following league match Ludwig was in the starting eleven again and contributed to keeping another clean sheet as his club drew 0–0 away against FC Fredericia on 27 September.[13]
On 29 November 2016, Ludwig was named Player of the Year for HB Køge after making 36 appearances and keeping 15 clean sheets throughout 2016.[14]
On 8 June 2016, Ludwig signed a two-year contract with Danish Superliga club AC Horsens, after their head coach Bo Henriksen had referred to him as his "dream player".[15][16] He made his debut on 14 July, playing the full match in a 2–1 away win over rivals AGF, marking his return to Danish top-tier football since his sole appearance for Midtjylland in 2011.[17] Ludwig would have a strong season in the centre of defense alongside Bubacarr Sanneh,[18] helping an overperforming Horsens-team reach the championship round where they eventually ended sixth in the league table. He capped off his season with 38 total appearances in which he scored three goals.[1]
On 12 June 2018, Ludwig signed a four-year deal with OB.[19] He made his debut for the club on 15 July against newly promoted Vendsyssel FF, his former club, which ended in a disappointing 3–2 loss away at Nord Energi Arena.[20] After a challenging first half of the season, where he was in and out of the starting lineup, Ludwig suffered a tear in the posterior cruciate ligament of his knee, which kept him out for some months.[21] He made his return to the pitch in a 2–1 win over AGF in March,[22] but would increasingly appear as a substitute for OB, especially into the next season.[23]
On 14 August 2019, AC Horsens announced that Ludwig had returned to the club on a four-year contract,[24] as a replacement for the outgoing defender Sivert Heltne Nilsen.[25][24] He made his return to the pitch for Horsens on 19 August, five days after signing, in a 2–0 away loss to AGF on Aarhus Stadium, where he started in the centre of defense next to Malte Kiilerich.[26] On 3 June 2020, Ludwig was voted into the "Team of the Week" of the Danish Superliga, after stringing together some strong performances in a rejuvenated Horsens-defense, beating league leader FC Midtjylland 1–0.[27]