본관은 단양(丹陽). 1359년(공민왕 8) 홍건적이 침입했을 때 원수 한방신(韓方信)의 휘하에서 공을 세워 감찰어사가 되고, 1372년에는 제주체복사(濟州體覆使)가 되었다.
이듬해 판선공시사(判繕工寺事)로서 명나라에 가서 말을 바쳤고, 1374년에 다시 하정사(賀正使)가 되어 명나라에 다녀왔다. 1375년(우왕 1)에 응양군상호군(鷹揚軍上護軍)으로서 명사피살사건(明使被殺事件)으로 간관의 탄핵을 받은 이인임(李仁任)에게 아부해 한리(韓理)와 함께 이를 변호하였다.
이듬해 경상도도순문사를 거쳐 1377년 경상도원수로서 영광·장사(長沙) 등지에 침입한 왜구를 격파했고, 다음 해 경상 양광 전라삼도도체찰사(慶尙楊廣全羅三道都體察使)가 되어 왜구를 방어하였다.
1379년 지문하사(知門下事)로서 경상도상원수가 되어 청도(淸道)에서 왜구를 격파했고, 이어 합포(合浦)와 사주(泗州)에서 또 왜구를 대파해 합포도순문사가 되었다. 1383년 찬성사상의(贊成事商議)로서 청평에 들어온 왜구를 토벌했고, 1385년 서북면도순문사가 되었다.
1387년에는 문하평리 상의(門下評理商議)로서 홍징(洪徵)과 함께 한양산성(漢陽山城)의 수축과 전함의 수리를 감독했으며, 1388년(창왕 즉위년)에 문하찬성사(門下贊成事)로서 정당문학(政堂文學) 설장수(偰長壽)와 함께 명나라에 들어가서 창왕의 습위(襲位)를 알렸다.
1390년(공양왕 2) 계림윤(鷄林尹)이 되었으나, 전 해에 일어난 김저(金佇)의 옥사(獄事)에 변안열(邊安烈)·이림(李琳)·우현보(禹玄寶) 등과 함께 연루되었다는 대간의 탄핵을 받아 청풍군(淸風郡)으로 유배되었다. 이 후 곧 풀려났으나 다시 윤이(尹彛)·이초(李初)의 무고 때문에 청주옥에 갇혔다가 이듬해 풀려났다.
1392년 조선 개국 후 문하시랑찬성사(門下侍郎贊成事)로서 사은사가 되어 명나라에 갔다가 이듬해 귀국해 판개성부사가 되었으며, 개국원종공신(開國原從功臣)에 올랐다.
1395년(태조 4)에는 개성유후사유후(開城留後司留後)가 되고, 1400년(정종 2) 판승녕부사(判承寧府事)에 이어 판삼사사(判三司事)로서 정조사(正朝使)가 되어 명나라에 갔다.
1401년(태종 1)에 귀국하여, 이 해에 단행된 정종의 사위(辭位)와 태종의 습위를 허락한 데 대한 사은사로 명나라에 다녀왔다. 1403년 검교좌정승(檢校左政丞)에 올라 병사하였다.
시호는 정평(靖平)이다.