Laravel5.1 将终端执行的日志输出到其他文件

目前由于在我们的测试环境的项目里面,为了方便,laravel的schedule命令是由root用户运行的,这就会导致较早运行的命令生成的日志文件的owner是root,但是http请求是由apache用户接管的,导致http请求生成的日志无法写到日志文件中

我做了如下的修改,让schedule或者手动执行的命令产生的日志转到指定的日志文件中,http请求的日志还是在原来的日志文件中,两处来的日志互不干扰。

增加文件app/Console/Bootstrap/ConfigureConsoleLogging.php:

<?php

/**
 * This file is part of project alg-shopping.
 *
 * Author: Jake
 * Create: 2019-03-15 10:51:21
 */

namespace App\Console\Bootstrap;

use Illuminate\Log\Writer;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Foundation\Bootstrap\ConfigureLogging;

class ConfigureConsoleLogging extends ConfigureLogging
{
    /**
     * Configure the Monolog handlers for the application.
     *
     * @param  \Illuminate\Contracts\Foundation\Application|\Illuminate\Foundation\Application  $app
     * @param  \Illuminate\Log\Writer  $log
     * @return void
     */
    protected function configureDailyHandler(Application $app, Writer $log)
    {
        $log->useDailyFiles(
            $app->storagePath().'/logs/console.log',
            $app->make('config')->get('app.log_max_files', 10)
        );
    }
}

app/Console/Kernel.php中增加如下方法:

   public function bootstrap()
    {
        $this->app->bind(
            'Illuminate\Foundation\Bootstrap\ConfigureLogging',
            'App\Console\Bootstrap\ConfigureConsoleLogging'
        );

        parent::bootstrap();
    }

这样终端下产生的日志会写入到storage/logs/console-xxxx-xx-xx.log中,而原来的api请求的日志则还是写入到原来的storage/logs/laravel-xxxx-xx-xx.log中,互不干扰。

修复symfony下swiftmail 无法发送邮件的问题

wpcraft项目中,本来是支持在部分情况下自动发送邮件的,但是今天测试一下发现好像不好使了,并且印象中好像没有修改到swiftmail的配置,甚至一度怀疑是smtp服务器把我的IP屏蔽了的缘故,但是后来试了一下phpmail却可以正常发送邮件,对比了一下,好像swiftmail默认的配置缺少点东西,于是按如下补上,修改app/config/parameters.yml

swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    port: '587'
    encryption: 'tls'
    spool: { type: memory }

添加了portencryption两个参数,结果一切正常,至于为什么突然要加这两项配置,我也挺纳闷…

使用pecl安装php扩展

mac最近brew安装PHP扩展似乎不是很好使,于是想到使用pecl来安装了

pecl很大概率需要使用代理

下面的命令是安装php5.6版本的,具体安装什么版本可能需要去pecl.net网站上自己查看。

sudo pecl channel-update pecl.php.net
pecl search xdebug
sudo pecl install xdebug-2.5.5
sudo pecl install redis-2.2.8

PHP设计模式之观察者模式

感觉symfony中使用的service机制,依赖注入机制不是被很好的理解,主要是设计模式不了解,于是网上看了一下观察者模式的说明,算是有些了解了。

所谓观察者模式,就是当前对象应当有一个或者若干个观察者,当自己被改变时会通知观察者,让观察者做出反应,如果不用观察者模式,这个“做出反应”可能就是自己去实现的,这样使得代码耦合性太高,把这个反应放入到观察者,让观察者做自己的处理,当前类只专注于自己的业务处理,能有效降低耦合度。

Continue reading "PHP设计模式之观察者模式"