1. Overview
      1. What It Is
      2. Why I Would Want to Use It
      3. Known Issues
    2. Getting Started
      1. Fundamentals
        1. Design Patterns
        2. xPDO, the Class
          1. As Object and Relational Mapper
          2. As PDO Wrapper
          3. As Service Layer
          4. The xPDO Constructor
            1. Hydrating Fields
      2. Introduction to the xPDO Object Model
        1. Understanding xPDOCriteria and xPDOQuery
      3. Creating a Model With xPDO
        1. Defining a Schema
          1. Defining Relationships
          2. Defining the Database and Tables
            1. Upgrading Models to Schema Version 1.1
          3. More Examples of xPDO XML Schema Files
          4. Validation Rules in your Schema
        2. Generating the Model Code
          1. Domain Classes
          2. O-R Maps
          3. Table Classes
      4. Using Your xPDO Model
        1. Creating Objects
        2. Database Connections and xPDO
        3. Loading Packages
        4. Removing Objects
          1. removeCollection
        5. Retrieving Objects
          1. getCollectionGraph
        6. Setting Object Fields
        7. Working with Related Objects
    3. Extending Your xPDO Model
      1. Overriding Derived Behavior
        1. Using Custom Object Loaders
      2. Working With Transient Object Classes
    4. Advanced Features
      1. Caching
        1. Caching Tutorial - Basic Snippets
        2. Caching Tutorial - Lifetimes
      2. Object Validation
        1. xPDOForeignKeyConstraint
        2. xPDOMaxLengthValidationRule
        3. xPDOMaxValueValidationRule
        4. xPDOMinLengthValidationRule
        5. xPDOMinValueValidationRule
        6. xPDOObjectExistsValidationRule
    5. xPDO Development
      1. Testing
      2. Building
      3. Documentation and Tutorials
    6. Class Reference
      1. xPDO
        1. xPDO.addPackage
        2. xPDO.beginTransaction
        3. xPDO.commit
        4. xPDO.connect
        5. xPDO.fromJSON
        6. xPDO.getCollection
        7. xPDO.getCollectionGraph
        8. xPDO.getCount
        9. xPDO.getDebug
        10. xPDO.getFields
        11. xPDO.getIterator
        12. xPDO.getManager
        13. xPDO.getObject
        14. xPDO.getObjectGraph
        15. xPDO.getOption
        16. xPDO.getTableName
        17. xPDO.loadClass
        18. xPDO.log
        19. xPDO.newObject
        20. xPDO.newQuery
        21. xPDO.query
        22. xPDO.setDebug
        23. xPDO.setLogLevel
        24. xPDO.setLogTarget
        25. xPDO.setOption
        26. xPDO.toJSON
      2. xPDOCacheManager
        1. xPDOCacheManager.copyFile
        2. xPDOCacheManager.copyTree
        3. xPDOCacheManager.delete
        4. xPDOCacheManager.deleteTree
        5. xPDOCacheManager.endsWith
        6. xPDOCacheManager.escapeSingleQuotes
        7. xPDOCacheManager.get
        8. xPDOCacheManager.getCachePath
        9. xPDOCacheManager.getCacheProvider
        10. xPDOCacheManager.matches
        11. xPDOCacheManager.replace
        12. xPDOCacheManager.set
        13. xPDOCacheManager.writeFile
        14. xPDOCacheManager.writeTree
      3. xPDOGenerator
        1. xPDOGenerator.parseSchema
        2. xPDOGenerator.writeSchema
      4. xPDOManager
        1. xPDOManager.createObjectContainer
        2. xPDOManager.createSourceContainer
        3. xPDOManager.removeObjectContainer
        4. xPDOManager.removeSourceContainer
      5. xPDOObject
        1. Configuration Accessors
          1. getOption
          2. setOption
        2. Field Accessors
          1. fromArray
          2. fromJSON
          3. get
          4. set
          5. toArray
          6. toJSON
        3. Metadata Accessors
          1. getFieldName
          2. getFKClass
          3. getFKDefinition
          4. getPK
          5. getPKType
          6. getSelectColumns
        4. Persistence Methods
          1. remove
          2. save
        5. Related Object Accessors
          1. addMany
          2. addOne
          3. getMany
          4. getOne
        6. State Accessors
          1. isDirty
          2. isLazy
          3. isNew
        7. Static Object Loaders
          1. _loadCollectionInstance
          2. _loadInstance
          3. _loadRows
          4. load
          5. loadCollection
          6. loadCollectionGraph
          7. Using Custom Loader Classes
        8. Validation
          1. addValidationRule
          2. getValidator
          3. isValidated
          4. removeValidationRules
          5. validate
      6. xPDOQuery
        1. xPDOQuery.andCondition
        2. xPDOQuery.groupby
        3. xPDOQuery.innerJoin
        4. xPDOQuery.leftJoin
        5. xPDOQuery.limit
        6. xPDOQuery.orCondition
        7. xPDOQuery.rightJoin
        8. xPDOQuery.select
        9. xPDOQuery.setClassAlias
        10. xPDOQuery.sortby
        11. xPDOQuery.where
      7. xPDORevisionControl
      8. xPDOTransport
        1. xPDOTransport.install
        2. xPDOTransport.pack
        3. xPDOTransport.uninstall
      9. xPDOValidator
        1. xPDOValidator.addMessage
        2. xPDOValidator.getMessages
        3. xPDOValidator.hasMessages
        4. xPDOValidator.validate

xPDO.log

Last edited by Peter Bowyer on Nov 17, 2014.

xPDO::log

Log a message with details about where and when an event occurs.

Syntax

$xpdo->log($level, $msg, $target= '', $def= '', $file= '', $line= '');
  • $level (integer) The verbosity level of the logged message. See Verbosity Constants below
  • $msg (string) The message to log.
  • $target (mixed) The logging target. If a string, this should be FILE, HTML, or ECHO. If an array, see examples below.
  • $def (string) The name of a defining structure (such as a class) to help identify the log event source.
  • $file (string) A filename in which the log event occurred. Usually you would use the __FILE__ constant.
  • $line (string) A line number to help locate the source of the event. Usually you would use the __LINE__ constant

API Docs: http://api.modx.com/revolution/2.2/db_core_xpdo_xpdo.class.html#%5CxPDO

void log (integer $level, string $msg, [string $target = ''], [string $def = ''], [string $file = ''], [string $line = ''])

Log Levels

In many cases, you can use the MODX equivalent constants for log levels.

What gets printed is controlled by the log_level System Setting. You can override this at runtime using the setLogLevel method.

Examples

Simple

Simple log message, will write to the default log file (e.g. core/cache/logs/error.log):

$xpdo->log(xPDO::LOG_LEVEL_ERROR,'An error occurred.');

In the logs, this would appear like this:

[2013-09-15 14:21:25] (ERROR @ /index.php) [Mobile Detect] An error occurred.

Specify the Snippet

Because MODX application ultimately runs via the index.php file, it can be helpful to add some extra information:

$xpdo->log(xPDO::LOG_LEVEL_ERROR,'An error occurred.','','MySnippet');
[2013-09-15 14:22:48] (ERROR in MySnippet @ /index.php) An error occurred

Specify File and Line

Remember that ultimately, all MODX Snippets and Plugins run from cached files, so the source file listed will be the cached file

$xpdo->log(xPDO::LOG_LEVEL_ERROR,'This is my error message...','','MySnippet',__FILE__,__LINE__);
[2013-09-15 14:48:02] (ERROR in MySnippet @ /path/to/core/cache/includes/elements/modsnippet/28.include.cache.php : 7) This is my error message...

Custom Log File

You may wish to send errors to a destination other than the default MODX error log. To accomplish this, you must pass an array to the $target argument. You must verbosely specify 'FILE' as the target, otherwise, the message will be echoed back to the page.

$xpdo->log(xPDO::LOG_LEVEL_ERROR,'Error for my custom log file', 
    array('target'=>'FILE', 'options'=> array('filename'=>'custom.log'))
);

By default, the path for log files is core/cache/logs/ so in this example, we find our log message inside the custom.log file:

[2013-09-15 15:01:07] (ERROR @ /index.php) Error for my custom log file

If desired, you may also specify the path via the filepath argument.

Because this is a bit verbose, you may find it cleaner to define your logging target once then reference the array:

$log_target = array(
    'target'=>'FILE',
    'options' => array(
        'filename'=>'my_custom.log'
    )
); 
$xpdo->log(xPDO::LOG_LEVEL_ERROR,'My Error...',$log_target); 
$xpdo->log(xPDO::LOG_LEVEL_ERROR,'Some other error...',$log_target);

Debugging

You can change the level of the logged message by adjusting the first parameter. E.g. to log a debug message:

$xpdo->log(xPDO::LOG_LEVEL_DEBUG,'This is a debugging statement.');

Custom Use in Snippets

It can be really handy to increase logging verbosity for a single Snippet or plugin. To accomplish this, use the setLogLevel() function. You can use this to override the global value of the log_level System Setting:

// Call your snippet like this: [[mySnippet? &log_level=`4`]]
// Override global log_level value
$log_level = $modx->getOption('log_level',$scriptProperties, $modx->getOption('log_level'));
$modx->setLogLevel($log_level);

Verbosity Constants

xPDO Constant MODX Constant Value
xPDO::LOG_LEVEL_FATAL MODX_LOG_LEVEL_FATAL 0
xPDO::LOG_LEVEL_ERROR MODX_LOG_LEVEL_ERROR 1
xPDO::LOG_LEVEL_WARN MODX_LOG_LEVEL_WARN 2
xPDO::LOG_LEVEL_INFO MODX_LOG_LEVEL_INFO 3
xPDO::LOG_LEVEL_DEBUG MODX_LOG_LEVEL_DEBUG 4

See Also

  • log_level System Setting
  • log_target System Setting
  • xPDO

Suggest an edit to this page on GitHub (Requires GitHub account. Opens a new window/tab) or become an editor of the MODX Documentation.