본관은 달성(達城). 자는 학수(鶴叟). 서종엽(徐宗曄)의 증손으로, 할아버지는 서명인(徐命仁)이고, 아버지는 관찰사 서직수(徐直修)이다. 어머니는 조영극(趙榮克)의 딸이다.
1787년(정조 11) 정시 문과에 병과로 급제, 예문관검열(藝文館檢閱)에 임명되었다. 1791년에 승문원정자(承文院正字) 이인채(李寅采)로부터 역적의 후손 조수민(趙秀民)을 가주서(假注書)로 천거했다 하여 탄핵을 받고 사판(仕版: 벼슬아치의 명단)에서 이름이 삭제되었다.
그 해 다시 홍낙유(洪樂遊)와 함께 조흘강(照訖講: 과거에 응시한 유생들을 성균관에서 호적을 대조한 뒤 『소학』을 강론하게 하던 제도)의 적간사관(摘奸史官)으로 임명되었다. 그런데 조흘강의 시관(試官)인 윤영희(尹永僖)와 불미스러운 일로 서로 다투다가 제천현(堤川縣)에 유배되었으며 그 해 12월에 풀려났다.
1794년에 별겸춘추(別兼春秋)로 있을 때 예문관검열을 추천하는 자리에서 정조에게 오주(誤奏: 그릇되게 견해를 올림)를 하여 다시 삭직당하였다. 그리고 그 해에 다시 홍문관교리(弘文館校理)로 임명되었으나, 이응혁(李應爀)을 중비(中批: 전형을 거치지 않고 왕의 특지로 임명하는 것)로 부총관(副摠管)에 임명함은 부당하다는 차자(箚子)를 올려 또다시 창녕현(昌寧縣)에 유배되었다가 두 달만에 풀려났다.
곧이어 양남암행어사(兩南暗行御史)로 파견되었다가 1798년에 동지사(冬至使)의 서장관(書狀官)으로 임명되어 이듬해에 귀국, 한글로 된 기행문 『무오연행록(戊午燕行錄)』을 저술하였다. 그 뒤 통례(通禮)·승지(承旨) 등을 역임하다가 1800년에 순조가 즉위하자, 사헌부로부터 김이재(金履載)의 일당으로 지목되어 탄핵을 받고 위원군(渭原郡)에 정배되었다.
1811년(순조 11) 대사간에 임명된 뒤 충청감사·이조참의·의주부윤·평안감사 및 사옹원(司饔院)의 감선제조(監膳提調) 등을 역임하면서 천릉도감(遷陵都監)에서 일한 공로로 가자(加資)되었다. 1822년에는 이조참판에 제수되었다.