As we have seen the LogBox DSL can be used in different contexts:
- Portable CFC with a
configure()
method in alogbox
variable - ColdBox config inside the
configure()
method in alogbox
variable - A struct literal sent in to the constructor of LogBox
NO matter how you dice it, it's the same LogBox Config DSL:
**
* A LogBox configuration data object
*/
component{
function configure(){
logBox = {
appenders : {},
root : {},
categories : {},
fatal : [],
error : [],
warn : [],
info : [],
debug : [],
off : []
};
}
}
Root level configuration keys.
Key | Description |
---|---|
Key | Description |
appenders | A structure where you will define appenders |
root | A structure where you will configure the root logger |
categories | A structure where you can define granular categories (OPTIONAL) |
DEBUG | An array that will hold all the category names to place under the DEBUG logging level (OPTIONAL) |
INFO | An array that will hold all the category names to place under the INFO logging level (OPTIONAL) |
WARN | An array that will hold all the category names to place under the WARN logging level (OPTIONAL) |
ERROR | An array that will hold all the category names to place under the ERROR logging level (OPTIONAL) |
FATAL | An array that will hold all the category names to place under the FATAL logging level (OPTIONAL) |
OFF | An array that will hold all the category names to not log at all (OPTIONAL) |
appenders : {
console: { class : "ConsoleAppender" },
jsonConsole : {
class : "ConsoleAppender",
layout : "models.JSONLayout",
levelMin : 0,
levelMax : 4
},
errorLog: {
class: "FileAppender",
properties: {
filePath : "/logs",
fileName : "appname-errors"
},
levelMin : "FATAL",
levelMax : "ERROR"
}
}
To define an appender you must define a struct with a key value which is the internal name of the appender. Each appender's name must be unique. You configure each appender with the following keys:
Key | Description |
---|---|
class |
The class path of the appender |
properties |
The properties struct for the appender (OPTIONAL) |
layout |
The layout class path of the layout object to use (OPTIONAL) |
levelMin |
The numerical or English word of the minimal logging level (OPTIONAL, defaults to 0 [FATAL]) |
levelMax |
The numerical or English word of the maximum logging level (OPTIONAL, defaults to 4 [DEBUG]) |
To configure the root logger, use the following keys:
root : {
levelMax : "INFO",
appenders : "*"
}
root : {
appenders : "console",
levelMax : "DEBUG"
}
Key | Description |
---|---|
Key | Description |
levelMin | The numerical or English word of the minimal logging level (OPTIONAL, defaults to 0 [FATAL]) |
levelMax | The numerical or English word of the maximum logging level (OPTIONAL, defaults to 4 [DEBUG]) |
appenders | A string list of the appenders to use for logging or the * convention for all appenders. |
exclude | A string list of appenders to exclude from logging. |
// Granualr Categories
categories={
"coldbox.system" = { levelMin="FATAL", levelMax="INFO", appenders="*" },
"model.security" = { levelMax="DEBUG", appenders="console" }
}
To define categories, you define a struct with a key value, which is the internal name of the category. Each category name must be unique,. You configure each category with the following keys:
Key | Description |
---|---|
Key | Description |
levelMin | The numerical or English word of the minimal logging level (OPTIONAL, defaults to 0 [FATAL]) |
levelMax | The numerical or English word of the maximum logging level (OPTIONAL, defaults to 4 [DEBUG]) |
appenders | A string list of the appenders to use for logging (OPTIONAL, defaults to *) |
exclude | A string list of appenders to exclude from logging. |
As you might notice, the names of the keys on all the structures match 100% to the programmatic methods you can also use to configure logBox. So, when in doubt, refer back to the argument names.
logBox = {
// Appenders
appenders = {
appenderName = {
class="class.to.appender",
layout="class.to.layout",
levelMin=0,
levelMax=4,
properties={
name = value,
prop2 = value 2
}
},
// Root Logger
root = { levelMin="FATAL", levelMax="DEBUG", appenders="*" },
// Granualr Categories
categories={
"coldbox.system" = { levelMin="FATAL", levelMax="INFO", appenders="*" },
"model.security" = { levelMax="DEBUG", appenders="console" }
},
// Implicit categories
debug = [ "coldbox.system.interceptors" ],
info = [ "model.class", "model2.class2" ],
warn = [ "model.class", "model2.class2" ],
error = [ "model.class", "model2.class2" ],
fatal = [ "model.class", "model2.class2" ],
off = [ "model.class", "model2.class2" ]
};