北魏范阳涿县(今属河北)人,字善长。初为太傅掾。御史中尉李彪以他执法清刻,引为治书侍御史宣武帝时为东荆州刺史,为政严酷,免官。复起为河南尹。孝明帝改镇为州,为大使抚慰六镇,不果而还。后任御史中尉,为权贵所忌,出为关右大使监萧宝寅。被宝寅所杀。好学而博览奇书,撰《水经注》四十卷,文辞优美,为古代地理名著。