Skip to content

Instantly share code, notes, and snippets.

@syossan27
Created June 4, 2014 16:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syossan27/e03650c60f57a9490dfc to your computer and use it in GitHub Desktop.
Save syossan27/e03650c60f57a9490dfc to your computer and use it in GitHub Desktop.
実行するSQLのクエリーをlaravel.log以外に吐いてみた ref: http://qiita.com/syo/items/215ca672ebc04970444e
<?php namespace Illuminate\LogSql;
use Monolog\Logger;
use Illuminate\Support\ServiceProvider;
class LogSqlServiceProvider extends ServiceProvider {
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = true;
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$logger = new Writer(
new Logger($this->app['env']), $this->app['events']
);
$this->app->instance('logsql', $logger);
// If the setup Closure has been bound in the container, we will resolve it
// and pass in the logger instance. This allows this to defer all of the
// logger class setup until the last possible second, improving speed.
if (isset($this->app['logsql.setup']))
{
call_user_func($this->app['logsql.setup'], $logger);
}
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return array('logsql');
}
}
<?php namespace Illuminate\LogSql;
'providers' => array(
'Illuminate\LogSql\LogSqlServiceProvider',
// 省略
'aliases' => array(
'LogSql' => 'Illuminate\Support\Facades\LogSql',
// 省略
<?php namespace Illuminate\Support\Facades;
/**
* @see \Illuminate\LogSql\Writer
*/
class LogSql extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'logsql'; }
}
LogSql::useFiles(storage_path().'/logs/laravel_sql.log');
Event::listen('illuminate.query', function($query, $bindings, $time, $name)
{
$data = compact('bindings', 'time', 'name');
foreach ($bindings as $i => $binding)
{
if($binding instanceof \DateTime)
{
$bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
}elseif(is_string($binding)){
$bindings[$i] = "'$binding'";
}
}
$query = str_replace(array('%', '?'), array('%%', '%s'), $query);
$query = vsprintf($query, $bindings);
LogSql::info($query, $data);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment