1. A method of automatic application logging, comprising: receiving a directive for logging data associated with an application; modifying one or more runtime objects of an instance of the application running on a hardware processor according to the directive to collect the data, wherein individual instances of the same application running on the hardware processor are enabled to switch logging on and off, the modifying further comprising replacing the one or more runtime objects with another one or more runtime objects from a loggable component library that interacts with a runtime control, said another one or more runtime objects operable to behave like the one or more runtime objects and operable to log the data and send log data to a logger at a requested granularity, the modifying further comprising changing runtime method bindings and changing details of the data logged associated with the one or more runtime objects at runtime; and collecting the data via the modified one or more runtime objects, the modified one or more runtime objects modified to log the data for the collecting, wherein a part of the data that are sent to a server over a network are adaptively specified by the server based on a quality of the network, power level and cost of the network, adjusting the one or more runtime objects specified by the server, and adjusting behavior of the instance of the application to improve the application performance, based on analyzing of the one or more runtime objects and the behavior of the instance of the application.