mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 22:35:43 +00:00
2be5ff0c10
Mozlog currently has two implementations. The top level package is based on the logging module and is deprecated. The newer structured logging implementation lives in mozlog.structured. This patch swaps the two, so the top level mozlog module contains the recommended implementation, while mozlog.unstructured contains the old one. --HG-- rename : testing/mozbase/docs/mozlog_structured.rst => testing/mozbase/docs/mozlog.rst rename : testing/mozbase/mozlog/mozlog/structured/commandline.py => testing/mozbase/mozlog/mozlog/commandline.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/__init__.py => testing/mozbase/mozlog/mozlog/formatters/__init__.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/base.py => testing/mozbase/mozlog/mozlog/formatters/base.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/errorsummary.py => testing/mozbase/mozlog/mozlog/formatters/errorsummary.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/html/__init__.py => testing/mozbase/mozlog/mozlog/formatters/html/__init__.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/html/html.py => testing/mozbase/mozlog/mozlog/formatters/html/html.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/html/main.js => testing/mozbase/mozlog/mozlog/formatters/html/main.js rename : testing/mozbase/mozlog/mozlog/structured/formatters/html/style.css => testing/mozbase/mozlog/mozlog/formatters/html/style.css rename : testing/mozbase/mozlog/mozlog/structured/formatters/html/xmlgen.py => testing/mozbase/mozlog/mozlog/formatters/html/xmlgen.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/machformatter.py => testing/mozbase/mozlog/mozlog/formatters/machformatter.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/tbplformatter.py => testing/mozbase/mozlog/mozlog/formatters/tbplformatter.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/unittest.py => testing/mozbase/mozlog/mozlog/formatters/unittest.py rename : testing/mozbase/mozlog/mozlog/structured/formatters/xunit.py => testing/mozbase/mozlog/mozlog/formatters/xunit.py rename : testing/mozbase/mozlog/mozlog/structured/handlers/__init__.py => testing/mozbase/mozlog/mozlog/handlers/__init__.py rename : testing/mozbase/mozlog/mozlog/structured/handlers/base.py => testing/mozbase/mozlog/mozlog/handlers/base.py rename : testing/mozbase/mozlog/mozlog/structured/handlers/bufferhandler.py => testing/mozbase/mozlog/mozlog/handlers/bufferhandler.py rename : testing/mozbase/mozlog/mozlog/structured/handlers/statushandler.py => testing/mozbase/mozlog/mozlog/handlers/statushandler.py rename : testing/mozbase/mozlog/mozlog/structured/logtypes.py => testing/mozbase/mozlog/mozlog/logtypes.py rename : testing/mozbase/mozlog/mozlog/structured/reader.py => testing/mozbase/mozlog/mozlog/reader.py rename : testing/mozbase/mozlog/mozlog/structured/scripts/__init__.py => testing/mozbase/mozlog/mozlog/scripts/__init__.py rename : testing/mozbase/mozlog/mozlog/structured/scripts/format.py => testing/mozbase/mozlog/mozlog/scripts/format.py rename : testing/mozbase/mozlog/mozlog/structured/scripts/logmerge.py => testing/mozbase/mozlog/mozlog/scripts/logmerge.py rename : testing/mozbase/mozlog/mozlog/structured/scripts/unstable.py => testing/mozbase/mozlog/mozlog/scripts/unstable.py rename : testing/mozbase/mozlog/mozlog/structured/stdadapter.py => testing/mozbase/mozlog/mozlog/stdadapter.py rename : testing/mozbase/mozlog/mozlog/structured/structuredlog.py => testing/mozbase/mozlog/mozlog/structuredlog.py rename : testing/mozbase/mozlog/mozlog/logger.py => testing/mozbase/mozlog/mozlog/unstructured/logger.py rename : testing/mozbase/mozlog/mozlog/loggingmixin.py => testing/mozbase/mozlog/mozlog/unstructured/loggingmixin.py rename : testing/mozbase/mozlog/mozlog/loglistener.py => testing/mozbase/mozlog/mozlog/unstructured/loglistener.py extra : commitid : 3JWk75JY4N0 extra : rebase_source : 229bad7a7bf8ead013ce62d128c0896a75cad393
170 lines
4.2 KiB
JavaScript
170 lines
4.2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
this.EXPORTED_SYMBOLS = [
|
|
"StructuredLogger"
|
|
];
|
|
|
|
/**
|
|
* TestLogger: Logger class generating messages compliant with the
|
|
* structured logging protocol for tests exposed by mozlog
|
|
*
|
|
* @param name
|
|
* The name of the logger to instantiate.
|
|
* @param dumpFun
|
|
* An underlying function to be used to log raw messages. This function
|
|
* will receive the complete serialized json string to log.
|
|
* @param mutators
|
|
* An array of functions used to add global context to log messages.
|
|
* These will each be called with the complete object to log as an
|
|
* argument.
|
|
*/
|
|
this.StructuredLogger = function (name, dumpFun=dump, mutators=[]) {
|
|
this.name = name;
|
|
this._dumpFun = dumpFun;
|
|
this._mutatorFuns = mutators;
|
|
this._runningTests = new Set();
|
|
}
|
|
|
|
/**
|
|
* Log functions producing messages in the format specified by mozlog
|
|
*/
|
|
StructuredLogger.prototype.testStart = function (test) {
|
|
this._runningTests.add(test);
|
|
let data = {test: test};
|
|
this._logData("test_start", data);
|
|
}
|
|
|
|
StructuredLogger.prototype.testStatus = function (test, subtest, status, expected="PASS",
|
|
message=null, stack=null, extra=null) {
|
|
let data = {
|
|
test: test,
|
|
subtest: subtest,
|
|
status: status,
|
|
};
|
|
|
|
if (expected != status && status != "SKIP") {
|
|
data.expected = expected;
|
|
}
|
|
if (message !== null) {
|
|
data.message = message;
|
|
}
|
|
if (stack !== null) {
|
|
data.stack = stack;
|
|
}
|
|
if (extra !== null) {
|
|
data.extra = extra;
|
|
}
|
|
|
|
this._logData("test_status", data);
|
|
}
|
|
|
|
StructuredLogger.prototype.testEnd = function (test, status, expected="OK", message=null,
|
|
stack=null, extra=null) {
|
|
let data = {test: test, status: status};
|
|
|
|
if (expected != status && status != "SKIP") {
|
|
data.expected = expected;
|
|
}
|
|
if (message !== null) {
|
|
data.message = message;
|
|
}
|
|
if (stack !== null) {
|
|
data.stack = stack;
|
|
}
|
|
if (extra !== null) {
|
|
data.extra = extra;
|
|
}
|
|
|
|
if (!this._runningTests.has(test)) {
|
|
this.error("Test \"" + test + "\" was ended more than once or never started. " +
|
|
"Ended with this data: " + JSON.stringify(data));
|
|
return;
|
|
}
|
|
|
|
this._runningTests.delete(test);
|
|
this._logData("test_end", data);
|
|
}
|
|
|
|
StructuredLogger.prototype.suiteStart = function (tests, runinfo=null) {
|
|
|
|
let data = {tests: tests};
|
|
if (runinfo !== null) {
|
|
data.runinfo = runinfo;
|
|
}
|
|
|
|
this._logData("suite_start", data);
|
|
};
|
|
|
|
StructuredLogger.prototype.suiteEnd = function () {
|
|
this._logData("suite_end");
|
|
};
|
|
|
|
/**
|
|
* Unstructured logging functions. The "extra" parameter can always by used to
|
|
* log suite specific data. If a "stack" field is provided it is logged at the
|
|
* top level of the data object for the benefit of mozlog's formatters.
|
|
*/
|
|
StructuredLogger.prototype.log = function (level, message, extra=null) {
|
|
let data = {
|
|
level: level,
|
|
message: message,
|
|
};
|
|
|
|
if (extra !== null) {
|
|
data.extra = extra;
|
|
if ("stack" in extra) {
|
|
data.stack = extra.stack;
|
|
}
|
|
}
|
|
|
|
this._logData("log", data);
|
|
}
|
|
|
|
StructuredLogger.prototype.debug = function (message, extra=null) {
|
|
this.log("DEBUG", message, extra);
|
|
}
|
|
|
|
StructuredLogger.prototype.info = function (message, extra=null) {
|
|
this.log("INFO", message, extra);
|
|
}
|
|
|
|
StructuredLogger.prototype.warning = function (message, extra=null) {
|
|
this.log("WARNING", message, extra);
|
|
}
|
|
|
|
StructuredLogger.prototype.error = function (message, extra=null) {
|
|
this.log("ERROR", message, extra);
|
|
}
|
|
|
|
StructuredLogger.prototype.critical = function (message, extra=null) {
|
|
this.log("CRITICAL", message, extra);
|
|
}
|
|
|
|
StructuredLogger.prototype._logData = function (action, data={}) {
|
|
let allData = {
|
|
action: action,
|
|
time: Date.now(),
|
|
thread: null,
|
|
pid: null,
|
|
source: this.name
|
|
};
|
|
|
|
for (let field in data) {
|
|
allData[field] = data[field];
|
|
}
|
|
|
|
for (let fun of this._mutatorFuns) {
|
|
fun(allData);
|
|
}
|
|
|
|
this._dumpMessage(allData);
|
|
};
|
|
|
|
StructuredLogger.prototype._dumpMessage = function (message) {
|
|
this._dumpFun(JSON.stringify(message));
|
|
}
|