Bug 831882 - Correctly install proxied log functions; r=rnewman
--- a/toolkit/modules/Sqlite.jsm
+++ b/toolkit/modules/Sqlite.jsm
@@ -142,29 +142,36 @@ function openConnection(options) {
* @param basename
* (string) The basename of this database name. Used for logging.
* @param number
* (Number) The connection number to this database.
*/
function OpenedConnection(connection, basename, number) {
let log = Log4Moz.repository.getLogger("Sqlite.Connection." + basename);
+ // getLogger() returns a shared object. We can't modify the functions on this
+ // object since they would have effect on all instances and last write would
+ // win. So, we create a "proxy" object with our custom functions. Everything
+ // else is proxied back to the shared logger instance via prototype
+ // inheritance.
+ let logProxy = {__proto__: log};
+
// Automatically prefix all log messages with the identifier.
for (let level in Log4Moz.Level) {
if (level == "Desc") {
continue;
}
let lc = level.toLowerCase();
- log[lc] = function (msg) {
- return Log4Moz.Logger.prototype[lc].call(log, "Conn #" + number + ": " + msg);
- }
+ logProxy[lc] = function (msg) {
+ return log[lc].call(log, "Conn #" + number + ": " + msg);
+ };
}
- this._log = log;
+ this._log = logProxy;
this._log.info("Opened");
this._connection = connection;
this._open = true;
this._cachedStatements = new Map();
this._anonymousStatements = new Map();