Reference to a macro is simply replaced by its body and a is not a valid X++ statement. You could use the variable in a valid statement (e.g. info(int2str(a));) but it’s strange to have macros that depend on specific variable names. The right way is to use parameters - for example:
int a = 1;
;
#localmacro.LMacReportLog
info(int2str(%1));
#endmacro
#LMacReportLog(a)