diff --git a/connector/ldap/ldap.go b/connector/ldap/ldap.go
index 75a7d2840a33fe7a0f5ec221022ce3ac8b593b33..1b9951814d9a67b0e8539dfae981d1ab96f1e0f4 100644
--- a/connector/ldap/ldap.go
+++ b/connector/ldap/ldap.go
@@ -192,7 +192,7 @@ func userMatchers(c *Config, logger log.Logger) []UserMatcher {
 		return c.GroupSearch.UserMatchers
 	}
 
-	logger.Warn(`ldap: fields groupSearch userAttr/groupAttr are deprecated, use groupSearch.userMatchers instead.`)
+	log.Deprecated(logger, `LDAP: use groupSearch.userMatchers option instead of "userAttr/groupAttr" fields.`)
 	return []UserMatcher{
 		{
 			UserAttr:  c.GroupSearch.UserAttr,
diff --git a/pkg/log/deprecated.go b/pkg/log/deprecated.go
new file mode 100644
index 0000000000000000000000000000000000000000..f20e8b4cb824d4ca554f55bec2a4ecae05a519df
--- /dev/null
+++ b/pkg/log/deprecated.go
@@ -0,0 +1,5 @@
+package log
+
+func Deprecated(logger Logger, f string, args ...interface{}) {
+	logger.Warnf("Deprecated: "+f, args...)
+}
diff --git a/server/deviceflowhandlers.go b/server/deviceflowhandlers.go
index 5ec7eb8e1603b6472a34f1a10c47f1d402f1bb05..fb73f257f263892cf9b31c9c7999aabfb0150669 100644
--- a/server/deviceflowhandlers.go
+++ b/server/deviceflowhandlers.go
@@ -11,6 +11,7 @@ import (
 	"strings"
 	"time"
 
+	"github.com/dexidp/dex/pkg/log"
 	"github.com/dexidp/dex/storage"
 )
 
@@ -152,7 +153,7 @@ func (s *Server) handleDeviceCode(w http.ResponseWriter, r *http.Request) {
 }
 
 func (s *Server) handleDeviceTokenDeprecated(w http.ResponseWriter, r *http.Request) {
-	s.logger.Warn(`The deprecated "/device/token" endpoint was called. It will be removed, use "/token" instead.`)
+	log.Deprecated(s.logger, `The /device/token endpoint was called. It will be removed, use /token instead.`)
 
 	w.Header().Set("Content-Type", "application/json")
 	switch r.Method {