946
edits
No edit summary |
|||
Line 9: | Line 9: | ||
This is a partial implementation of the Log4* interfaces (for example, see [http://logging.apache.org/log4j/1.2/index.html log4j] or [http://logging.apache.org/log4net/ log4net]). The original implementation came from Michael Johnston, but it was heavily modified by Dan Mills to get it into Weave. | This is a partial implementation of the Log4* interfaces (for example, see [http://logging.apache.org/log4j/1.2/index.html log4j] or [http://logging.apache.org/log4net/ log4net]). The original implementation came from Michael Johnston, but it was heavily modified by Dan Mills to get it into Weave. | ||
To use it, create one or more appenders while initializing your add-on, and create loggers in the places where you have logging messages to emit. Both loggers and appenders have minimum log levels to allow you to customize your logging output without changing any code. | To use it, create one or more appenders while initializing your add-on, and create loggers in the places where you have logging messages to emit. Both loggers and appenders have minimum log levels to allow you to customize your logging output without changing any code. For example: | ||
function setupLogging() { | |||
// The basic formatter will output lines like: | |||
// DATE/TIME LoggerName LEVEL (log message) | |||
let formatter = Log4Moz.Service.newFormatter("basic"); | |||
// Loggers are hierarchical, lowering this log level will affect all output | |||
let root = Log4Moz.Service.rootLogger; | |||
root.level = Log4Moz.Level["All"]; | |||
// A console appender outputs to the JS Error Console | |||
let capp = Log4Moz.Service.newAppender("console", formatter); | |||
capp.level = Log4Moz.Level["Warn"]; | |||
root.addAppender(capp); | |||
// A dump appender outputs to standard out | |||
let dapp = Log4Moz.Service.newAppender("dump", formatter); | |||
dapp.level = Log4Moz.Level["Debug"]; | |||
root.addAppender(dapp); | |||
} | |||
// ... in some other code, but after setupLogging() has been done | |||
// Get a logger, give it a name unique to this chunk of code. | |||
// Use dots to create a hierarchy, this way you can later change | |||
// the log level of sets of loggers under some common root | |||
let logger = Log4Moz.Service.getLogger("MyExtension.MyClass"); | |||
logger.level = Log4Moz.Level["Debug"]; | |||
// Log some messages | |||
// Given our settings, the error would show up everywhere, but the | |||
// debug one would only show up in stdout | |||
logger.error("Oh noes!! Something bad happened!"); | |||
logger.debug("Details about bad thing only useful during debugging"); | |||
The implementation is much less comprehensive than what you might see in the log4* projects at Apache, however. For example, support for serializing the logging configuration or reading it in is non-existent. Also, note that this module used to be an XPCOM component and that influenced some of the interface design (e.g., Service.newAppender()). That will change in the future. | The implementation is much less comprehensive than what you might see in the log4* projects at Apache, however. For example, support for serializing the logging configuration or reading it in is non-existent. Also, note that this module used to be an XPCOM component and that influenced some of the interface design (e.g., Service.newAppender()). That will change in the future. |
edits