본관은 전주(全州). 자는 치화(稚和). 이영휘(李永輝)의 증손으로, 할아버지는 이택(李澤)이고, 아버지는 이현망(李顯望)이며, 어머니는 윤하교(尹夏敎)의 딸이다. 1761년(영조 37) 식년 문과에 장원으로 급제해 영조에게 『서전(書傳)』을 강의했고, 곧 이어 예문관검열에 뽑혔다.
정언(正言)·지평(持平)·헌납(獻納)·부수찬(副修撰)·교리(校理)를 거쳐 1768년 3월 다시 부교리가 되었다. 이 해 8월 관북지방 농사의 참상이 보고되자, 왕이 그를 북도어사로 삼아 위유하게 하는 한편, 탄일(誕日) 및 동지(冬至)의 물선(物膳)을 탕감하였다.
같은 해 11월 다시 북관어사로 나가 북도를 시찰했는데, 흉년이 심한 읍의 환자(還上)·대동포를 탕감시키고, 해창(海倉)에 곡식을 비축하지 않은 해당 수령을 파직하였다. 또 삼남지방과의 곡물 거래를 허용하도록 주장했으나 연변 읍에 피해를 준다는 이유로 시행되지 못하였다.
그 뒤 다시 수찬(修撰)·교리·사간(司諫)·필선(弼善) 등을 거쳐 1770년 다시 관동어사로 나가 민백흥(閔百興)의 탐장죄(貪贓罪)를 조사, 보고해 치죄하였다. 1774년 대사간 때는 빈번한 과거 실시로 인한 중비(中批: 인소전형을 거치지 않고 임금의 특지로 관원을 임명함)의 폐단을 논하고 시정을 건의해 왕으로부터 가납(嘉納)을 받았다.
1776년 어사를 피마(避馬)하지 않은 죄로 파직당한 광주부윤(廣州府尹) 조진관(趙鎭寬)을 대신해 광주부윤이 되었다. 그러다가 1777년(정조 1) 이포(吏逋) 4,500석 때문에 광주의 전후 부윤이 치죄될 때, 시임(時任) 부윤으로 고신(告身: 관직 입명 사령장)을 박탈당하였다. 그러나 곧 대사간·대사헌으로 복직되고 1785년 동지부사로 청나라에 다녀왔다. 이듬 해 원춘도관찰사(原春道觀察使)를 거쳐 1787년 다시 대사헌이 되었을 때 관리들의 부정부패와 선비들의 폐습을 신랄하게 비판하기도 하였다.
그 뒤 도총부도총관·한성부판윤, 공조·형조·예조·이조의 판서에 올랐다가 이안묵(李安默) 사건에 관련되어 공조판서로 체임되었다. 그 뒤 다시 대호군(大護軍)·우참찬·좌참찬을 거쳐 1802년(순조 2) 지중추부사로 죽었다.