This introduction to first-order logic clearly works out the role of first-order logic in the foundations of mathematics, particularly the two basic questions of the range of the axiomatic method and of theorem-proving by machines. It covers several advanced topics not commonly treated in introductory texts, such as Fraisse's characterization of elementary equivalence, Lindstrom's theorem on the maximality of first-order logic, and the fundamentals of logic programming.