PHPackages                             ndrx/profiler - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Debugging &amp; Profiling](/categories/debugging)
4. /
5. ndrx/profiler

AbandonedLibrary[Debugging &amp; Profiling](/categories/debugging)

ndrx/profiler
=============

Simple profiler package

0.7(10y ago)1104[5 issues](https://github.com/ndrx-io/profiler/issues)1MITPHPPHP &gt;=5.5.0

Since Nov 4Pushed 10y ago3 watchersCompare

[ Source](https://github.com/ndrx-io/profiler)[ Packagist](https://packagist.org/packages/ndrx/profiler)[ Docs](https://github.com/ndrx-io/profiler)[ RSS](/packages/ndrx-profiler/feed)WikiDiscussions master Synced today

READMEChangelog (10)Dependencies (10)Versions (15)Used By (1)

profiler
========

[](#profiler)

[![Latest Version on Packagist](https://camo.githubusercontent.com/9c4d4872f6fa23d746f5292d1466ed81d5fe7da695e8efa595d0509cf44e65b7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6e6472782f70726f66696c65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ndrx/profiler)[![Software License](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Build Status](https://camo.githubusercontent.com/f98a7a9ac3202bd70395e508e9c6b41d13fed410c38d2313a71df574101e4131/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f6e6472782d696f2f70726f66696c65722f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://travis-ci.org/ndrx-io/profiler)[![Quality Status](https://camo.githubusercontent.com/26655774fc76025bb892fbc213fe9f7cecf567710d6ec85a268658743a46e4df/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6e6472782d696f2f70726f66696c65722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/ndrx-io/profiler/)[![Coverage Status](https://camo.githubusercontent.com/1ed5ff213f0c6dc0c2f6b3b08e67b2f739ec0a6150c3e4f7648ab5cd652adef1/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6e6472782d696f2f70726f66696c65722f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/ndrx-io/profiler/)[![SensioLabsInsight](https://camo.githubusercontent.com/c761b89f6d3459d94dca66dd91eda5f439d961c3325eb956e202e36eda633725/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f36383765666634662d376266622d346130662d616635622d3437383666376136313463662f6d696e692e706e67)](https://insight.sensiolabs.com/projects/687eff4f-7bfb-4a0f-af5b-4786f7a614cf)

[![Build Status](https://camo.githubusercontent.com/dac1efad5d1261db9b46b7f4369c277f42f3678b20a027910618ab3ef6c9c572/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3538353431353133303838313634323439372f5167346e6945306f2e706e67)](http://ndrx.io)

Install
-------

[](#install)

Via Composer

```
$ composer require ndrx-io/profiler
```

Usage
-----

[](#usage)

### Initialize a profiler

[](#initialize-a-profiler)

```
// build a new profiler
$profiler = ProfilerFactory::build([
    ProfilerFactory::OPTION_ENABLE => true,
    ProfilerFactory::OPTION_DATASOURCE_PROFILES_FOLDER => '/tmp',
    ProfilerFactory::OPTION_COLLECTORS => [
        \Ndrx\Profiler\Collectors\Data\PhpVersion::class,
        \Ndrx\Profiler\Collectors\Data\CpuUsage::class,
        \Ndrx\Profiler\Collectors\Data\Context::class,
        \Ndrx\Profiler\Collectors\Data\Timeline::class,
        \Ndrx\Profiler\Collectors\Data\Request::class,
        \Ndrx\Profiler\Collectors\Data\Log::class,
        \Ndrx\Profiler\Collectors\Data\Duration::class,
        // add other data collector ...
    ],

    /**
    * Ndrx\Profiler\Components\Logs\Monolog
    * or Ndrx\Profiler\Components\Logs\Simple available
    **/
    ProfilerFactory::OPTION_LOGGER => \Ndrx\Profiler\Components\Logs\Monolog::class
]);

// initialize the profiler
$profiler->initiate();
```

### Add event to the timeline

[](#add-event-to-the-timeline)

```
$profiler->start('foo', 'Bar');
$profiler->stop('foo');
$this->profiler->monitor('Foobar', function() {
   // very long process
});
```

### Logger

[](#logger)

```
$profiler->debug('No beer');
$profiler->info('No beer');
$profiler->notice('No beer');
$profiler->alert('No beer');
$profiler->error('No beer');
$profiler->emergency('No beer');
$profiler->critical('No beer');
```

### Get last profils

[](#get-last-profils)

```
$profiles = $profiler->getDatasource()->all(0, 10);
```

### Get Profil details

[](#get-profil-details)

```
$id = '1576efef8ea36c74b533238affc3eaec7f94561d';
$profile = $profiler->getProfile($id);
```

### Clear all data

[](#clear-all-data)

```
$profile = $profiler->getDatasource()->clear();
```

### Use monolog handler

[](#use-monolog-handler)

```
$profiler = ProfilerFactory::build([
    // ...
    ProfilerFactory::LOGGER => Ndrx\Profiler\Components\Logs\Monolog::class
]);

// $log is your instance of Monolog\Logger
$log->pushHandler($profiler->getLogger();
```

Add new Collector
-----------------

[](#add-new-collector)

All data collector must implements one of those interfaces:

- Ndrx\\Profiler\\Collectors\\Contracts\\FinalCollectorInterface For data available only at the end of the process, like response data
- Ndrx\\Profiler\\Collectors\\Contracts\\StartCollectorInterface For data available at the beginning of the process, like request data
- Ndrx\\Profiler\\Collectors\\Contracts\\StreamCollectorInterface For data available during the process like logs, events, query...

### Initial collector

[](#initial-collector)

```
