Logging entry/exit of functions
===

Is this a good idea for applications?  Or does it just become a cumbersome task?  Ex:

    void foo() {
      LogEnter("foo");
      // do work here
      LogExit("foo");
    }

    int bar(int a) {
      LogEnter("bar", a);
      // do work here
      LogExit("bar", val);
      return val;
    }