سؤال

لقد كنت أستخدم CakePHP 2.4.4 لإنشاء جزء الويب التفاعلي من تطبيقي، وهذا يسير على ما يرام.CakePHP رائع.

أقوم الآن ببعض العمليات الخلفية الداعمة.يبدو أن وحدة التحكم وشركة Shell هي الطريقة للقيام بذلك حيث يمكنها الوصول إلى النماذج.

لقد قمت بكتابة الكود وتشغيله ولكني أحاول الكتابة إلى نفس السجل الذي أستخدمه للنماذج.في النماذج لدي وظيفة afterSave لتسجيل جميع تغييرات قاعدة البيانات واستخدمت للتو وظيفة $this->log("$model $logEntry", 'info'); للكتابة في السجل.

هذا لا يعمل في Shell لكنني اعتقدت أن CakeLog::write('info', "$model $logEntry"); قد تعمل ولكنها لا تعمل أيضا.

هل أحتاج إلى تهيئة CakeLog للإشارة إلى ملفات السجل الصحيحة؟

<?php
App::uses('CakeTime', 'Utility');
App::uses('CakeLog', 'Utility');

class ProcessRequestShell extends AppShell {
    //Need to access the request and monitor tables
    public $uses = array('Request');

    private function updateRequest($data){
        $model = 'Request';
        $result = $this->Request->save($data);

        $logEntry = "UPDATE ProcessRequestShell ";
        foreach ($data[$model] AS $k => $v){$logEntry .= "$k='$v' ";}
        if ($result){
            //$this->log("$model $logEntry", 'info');
            CakeLog::write('info', "$model $logEntry");
        } else {
            //$this->log("$model FAILED $logEntry", 'error');
            CakeLog::write('error', "$model FAILED $logEntry");
        }
        return($result);
    }

    public function main() {
        $options = array('conditions' => array('state' => 0, 'next_state' => 1));
        $this->Request->recursive = 0;
        $requests = $this->Request->find('all', $options);

        //See if the apply_changes_on date/time is past
        foreach ($requests AS $request){
            $this->out("Updating request ".$request['Request']['id'], 1, Shell::NORMAL);

            //Update the next_state to "ready"
            $request['Request']['state'] = 1;
            $request['Request']['next_state'] = 2;
            $this->updateRequest($request);
        }
    }
}
?>
هل كانت مفيدة؟

المحلول

هل قمت بإعداد مستمع/نطاق افتراضي لأنواع السجلات هذه؟إذا لم يكن الأمر كذلك، فلن يتم تسجيلهم.

// Setup a 'default' cache configuration for use in the application.
Cache::config('default', array('engine' => 'File'));

في bootstrap.php الخاص بك على سبيل المثال

يرى http://book.cakephp.org/2.0/en/appendices/2-2-migration-guide.html#log

نصائح أخرى

تحتاج إلى الإعداد default تسجيل دفق الكتابة إلى الملف، في نهاية المطاف، في app/Config/bootstrap.php.

CakeLog لا يقوم بتكوين نفسه تلقائيًا بعد الآن.لن يتم إنشاء ملفات سجل النتائج تلقائيًا بعد الآن إذا لم يكن هناك دفق يستمع.تأكد من حصولك على واحد على الأقل default تم إعداد الدفق ، إذا كنت تريد الاستماع إلى جميع الأنواع والمستويات.عادة، يمكنك فقط تعيين الأساسية FileLog فئة للإخراج في app/tmp/logs/:

CakeLog::config('default', array(
    'engine' => 'File'
));

يرى التسجيل → الكتابة إلى السجلات قسم كتاب الطبخ 2.x

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top