如何从Laravel发送Log事件到Loggly?

时间:2016-03-28 09:59:30

标签: laravel handler monolog loggly

我想将Laravel 5.1应用程序中的Monolog日志发送到Loggly.com在线日志管理服务。从所有可能的环境,包括当地的发展。

4 个答案:

答案 0 :(得分:8)

我发现了一些过时的库和复杂的方法。所以我最终得到了非常简单的解决方案。实际上,Laravel Monolog Handler已经开箱即用了Loggly Handler。

将配置信息添加到config / services.php:

'loggly' => array(
    'key'   => 'ENTER_YOUR_LOGGLY_TOKEN_HERE',
    'tag'   => 'ProjectName_' .strtolower(env('APP_ENV')),
),

在返回$ app之前,在bootstrap / app.php中添加Monolog处理程序:

/*
|--------------------------------------------------------------------------
| Setup Loggly Handler
|--------------------------------------------------------------------------
*/
$app->configureMonologUsing(function($monolog) {
    $handler = new      \Monolog\Handler\LogglyHandler(config('services.loggly.key'),\Monolog\Logger::DEBUG);
    $handler->setTag(config('services.loggly.tag'));

    $monolog->pushHandler($handler);
});

瞧!您将在Loggly仪表板中获取Monolog日志。

更新:(感谢@thitami)

基于laravel.com/docs/5.6/upgrade

  

configureMonologUsing方法   如果您使用configureMonologUsing方法为应用程序自定义Monolog实例,则现在应该创建自定义日志通道。有关如何创建自定义渠道的详细信息,请查看full logging documentation

答案 1 :(得分:2)

我能够管理Laravel的默认本地日志行为,并通过稍微调整mladen-janjetovic's代码同时推送到Loggly。在Laravel 5.3上测试

配置/ services.php:

'loggly' => [
    'key'   => 'ENTER_YOUR_LOGGLY_TOKEN_HERE',
    'tag'   => 'ProjectName_' .strtolower(env('APP_ENV')),
],

自举/ app.php:

/*
|--------------------------------------------------------------------------
| Push to Loggly, and save locally.
|--------------------------------------------------------------------------
*/
$app->configureMonologUsing(function($monolog) use ($app) {
    $log = $app->make(Illuminate\Log\Writer::class);

    $logglyHandler = new \Monolog\Handler\LogglyHandler(config('services.loggly.key'));
    $logglyHandler->setTag(config('services.loggly.tag'));

    if (config('app.env') == 'production') 
    {
        // Push to Loggly and save local if in production 
        $log->getMonolog()->pushHandler($logglyHandler);
        $log->useFiles(storage_path('/logs/laravel.log'));
    }
    else
    {
        // Otherwise, save only locally
        $log->useFiles(storage_path('/logs/laravel.log'));
    }
});

答案 2 :(得分:1)

或者,您可以使用Monolog-Cascade执行此操作。

  

Monolog-Cascade是一个Monolog扩展,允许您从单个配置文件中设置和配置多个记录器和处理程序。

以下是使用Loggly的Monolog-Cascade示例配置文件。这会记录给你stdOut和Loggly:

---
handlers:
    console:
        class: Monolog\Handler\StreamHandler
        level: DEBUG
        stream: php://stdout
    error_loggly_handler:
        class: Monolog\Handler\LogglyHandler
        level: ERROR
        token: xxxx-xxxx-xxxxxxxx
        tags: [cascade, waterfall]
loggers:
    my_logger:
        handlers: [console, error_loggly_handler]

如果您有兴趣,这里有一篇关于Cascade =>的博文。 https://medium.com/orchard-technology/enhancing-monolog-699efff1051d


[免责声明]:我是Monolog-Cascade的主要撰稿人。

答案 3 :(得分:0)

扩展Hassan的贡献(发布作为答案,因为我仍然没有足够的声誉发表评论)。

如果您需要在本地使用每日日志,可以使用以下代码:

$logFile = 'laravel'.'.txt';
$log->useDailyFiles(storage_path().'/logs/'.$logFile);

当然,日志文件名完全是任意的。在此示例中,格式将如下:

laravel-YYYY-MM-DD.txt

编辑: 升级到5.4这条线不再起作用了:

$log = $app->make(Illuminate\Log\Writer::class);

作为一种解决方法,您可以手动创建Writer实例,从configureMonologUsing闭包中注入$ monolog:

$log = new Illuminate\Log\Writer($monolog);