-#define GRAS_IN LOG1(gras_log_priority_trace, ">> begin of %s", __FUNCTION__)
-#define GRAS_OUT LOG1(gras_log_priority_trace, "<< end of %s", __FUNCTION__)
-#else
-#define GRAS_IN LOG0(gras_log_priority_trace, ">> begin of function")
-#define GRAS_OUT LOG0(gras_log_priority_trace, "<< end of function")
-#endif
+#define GRAS_IN LOG1(gras_log_priority_trace, ">> begin of %s", __FUNCTION__)
+#define GRAS_IN1(fmt,a) LOG2(gras_log_priority_trace, ">> begin of %s" fmt, __FUNCTION__, a)
+#define GRAS_IN2(fmt,a,b) LOG3(gras_log_priority_trace, ">> begin of %s" fmt, __FUNCTION__, a,b)
+#define GRAS_IN3(fmt,a,b,c) LOG4(gras_log_priority_trace, ">> begin of %s" fmt, __FUNCTION__, a,b,c)
+#define GRAS_IN4(fmt,a,b,c,d) LOG5(gras_log_priority_trace, ">> begin of %s" fmt, __FUNCTION__, a,b,c,d)
+#define GRAS_OUT LOG1(gras_log_priority_trace, "<< end of %s", __FUNCTION__)
+#else /* if fool enough to compile without gcc */
+#define GRAS_IN LOG0(gras_log_priority_trace, ">> begin of function")
+#define GRAS_IN1(fmt,a) LOG2(gras_log_priority_trace, ">> begin of function " fmt, a)
+#define GRAS_IN2(fmt,a,b) LOG3(gras_log_priority_trace, ">> begin of function " fmt, a,b)
+#define GRAS_IN3(fmt,a,b,c) LOG4(gras_log_priority_trace, ">> begin of function " fmt, a,b,c)
+#define GRAS_IN4(fmt,a,b,c,d) LOG5(gras_log_priority_trace, ">> begin of function " fmt, a,b,c,d)
+
+#define GRAS_OUT(fmt,a) LOG0(gras_log_priority_trace, "<< end of function")
+#endif /* end of foolness for non-gcc */