Skip to content

Latest commit

 

History

History
148 lines (113 loc) · 6.62 KB

File metadata and controls

148 lines (113 loc) · 6.62 KB

LogBox DSL

As we have seen the LogBox DSL can be used in different contexts:

  • Portable CFC with a configure() method in a logbox variable
  • ColdBox config inside the configure() method in a logbox 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   : []

        };
    }
}

Base Config

Root level configuration keys.

KeyDescription
KeyDescription
appendersA structure where you will define appenders
rootA structure where you will configure the root logger
categoriesA structure where you can define granular categories (OPTIONAL)
DEBUGAn array that will hold all the category names to place under the DEBUG logging level (OPTIONAL)
INFOAn array that will hold all the category names to place under the INFO logging level (OPTIONAL)
WARNAn array that will hold all the category names to place under the WARN logging level (OPTIONAL)
ERRORAn array that will hold all the category names to place under the ERROR logging level (OPTIONAL)
FATALAn array that will hold all the category names to place under the FATAL logging level (OPTIONAL)
OFFAn array that will hold all the category names to not log at all (OPTIONAL)

Appenders

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])

Root Logger

To configure the root logger, use the following keys:

root : {
    levelMax : "INFO",
    appenders : "*"
}

root : {
    appenders : "console",
    levelMax : "DEBUG"
}
KeyDescription
KeyDescription
levelMinThe numerical or English word of the minimal logging level (OPTIONAL, defaults to 0 [FATAL])
levelMaxThe numerical or English word of the maximum logging level (OPTIONAL, defaults to 4 [DEBUG])
appendersA string list of the appenders to use for logging or the * convention for all appenders.
excludeA string list of appenders to exclude from logging.

Categories

// 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:

KeyDescription
KeyDescription
levelMinThe numerical or English word of the minimal logging level (OPTIONAL, defaults to 0 [FATAL])
levelMaxThe numerical or English word of the maximum logging level (OPTIONAL, defaults to 4 [DEBUG])
appendersA string list of the appenders to use for logging (OPTIONAL, defaults to *)
excludeA 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.

Example Configuration

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" ]
};