diff --git a/loopy/type_inference.py b/loopy/type_inference.py
index 99a16bfc23341dba3d28c71038681c31d3e00dba..4c1e423e93e104fecd0b49a2b1ef2b4a261e38e7 100644
--- a/loopy/type_inference.py
+++ b/loopy/type_inference.py
@@ -38,6 +38,12 @@ import logging
 logger = logging.getLogger(__name__)
 
 
+def _debug(kernel, s, *args):
+    if logger.isEnabledFor(logging.DEBUG):
+        logstr = s % args
+        logger.debug("%s: %s" % (kernel.name, logstr))
+
+
 # {{{ type inference mapper
 
 class TypeInferenceMapper(CombineMapper):
@@ -378,8 +384,8 @@ def _infer_var_type(kernel, var_name, type_inf_mapper, subst_expander):
     if var_name in kernel.all_params():
         return [kernel.index_dtype], []
 
-    def debug(s):
-        logger.debug("%s: %s" % (kernel.name, s))
+    from functools import partial
+    debug = partial(_debug, kernel)
 
     dtype_sets = []
 
@@ -394,7 +400,7 @@ def _infer_var_type(kernel, var_name, type_inf_mapper, subst_expander):
 
         expr = subst_expander(writer_insn.expression)
 
-        debug("             via expr %s" % expr)
+        debug("             via expr %s", expr)
         if isinstance(writer_insn, lp.Assignment):
             result = type_inf_mapper(expr, return_dtype_set=True)
         elif isinstance(writer_insn, lp.CallInstruction):
@@ -416,7 +422,7 @@ def _infer_var_type(kernel, var_name, type_inf_mapper, subst_expander):
                 if result_i is not None:
                     result.append(result_i)
 
-        debug("             result: %s" % result)
+        debug("             result: %s", result)
 
         dtype_sets.append(result)
 
@@ -457,12 +463,12 @@ def infer_unknown_types(kernel, expect_completion=False):
 
     logger.debug("%s: infer types" % kernel.name)
 
+    from functools import partial
+    debug = partial(_debug, kernel)
+
     import time
     start_time = time.time()
 
-    def debug(s):
-        logger.debug("%s: %s" % (kernel.name, s))
-
     unexpanded_kernel = kernel
     if kernel.substitutions:
         from loopy.transform.subst import expand_subst
@@ -542,7 +548,7 @@ def infer_unknown_types(kernel, expect_completion=False):
             name = queue.pop(0)
             item = item_lookup[name]
 
-            debug("inferring type for %s %s" % (type(item).__name__, item.name))
+            debug("inferring type for %s %s", type(item).__name__, item.name)
 
             result, symbols_with_unavailable_types = (
                     _infer_var_type(
@@ -551,9 +557,9 @@ def infer_unknown_types(kernel, expect_completion=False):
             failed = not result
             if not failed:
                 new_dtype, = result
-                debug("     success: %s" % new_dtype)
+                debug("     success: %s", new_dtype)
                 if new_dtype != item.dtype:
-                    debug("     changed from: %s" % item.dtype)
+                    debug("     changed from: %s", item.dtype)
                     changed_during_last_queue_run = True
 
                     if isinstance(item, TemporaryVariable):