metahgover
metahgover

Reputation: 33

Double log statements

I have weird issue, it might be something silly but I can't find where the problem is. I develop an application on cakephp 2.x and when I log data from the controller it appears twice in the log. Something like this:

Just to add some fun, it doesn't happen in all functions in that controller, only in two out of six. It annoys me a lot and I don't see what way I should to dig to get rid of it. Any ideas?

EDIT: OK, I found that this happens when I log to the two different files in one method. When I change the line: CakeLog::write('time'....); to CakeLog::write('debug'....); everything works fine. Like in the following method:

function file_upload() {
    if (!$this->request->data) {           
    } else {
        CakeLog::write('time', 'start working at: ' . date('m/d/Y', strtotime("now")));

        $data = Sanitize::clean($this->request->data);

        CakeLog::write('debug', 'test statement');

        if ($data['Scrap']['excel_submittedfile']['type'] === 'application/vnd.ms-excel' && $data['Scrap']['csv_submittedfile']['type'] === 'text/csv') {
            $tmp_xls_file = $data['Scrap']['excel_submittedfile']['tmp_name'];
            $xls_file = $data['Scrap']['excel_submittedfile']['name'];
            $tmp_csv_file = $data['Scrap']['csv_submittedfile']['tmp_name'];
            $csv_file = $data['Scrap']['csv_submittedfile']['name'];
            $upload_dir = WWW_ROOT . "/files/";
            if (file_exists($upload_dir) && is_writable($upload_dir)) {
                if (move_uploaded_file($tmp_xls_file, $upload_dir . $xls_file) && move_uploaded_file($tmp_csv_file, $upload_dir . $csv_file)) {

                    CakeLog::write('debug', 'excel file uploaded');

                    $this->redirect(array('action' => 'edit', $xls_file, $csv_file));
                } else {
                    echo 'upload failed';
                }
            } else {
                echo 'Upload directory is not writable, or does not exist.';
            }
        } else {
            echo 'make sure the files are in correct format';
        }
    }
}

I guess it has something to do with declarations of log files in bootstrap.php. So it's not that big problem just annoying.

Upvotes: 3

Views: 894

Answers (1)

Ilie Pandia
Ilie Pandia

Reputation: 1839

This happens because your call

CakeLog::write('time', 'start working at: ' . date('m/d/Y', strtotime("now")));

Will attempt to write a log of the type: "time". Since there is no stream configured to handle that the CakeLog will create a "default" stream for you to handle this log call.

The problem is that, from now on you will have a "default" stream configured that will catch all logs and double them for debug and error logs.

The solution is to properly configure the log in the bootstrap.php file like this:

CakeLog::config('time_stream', array(
    'engine' => 'FileLog',
    'types' => array( 'time' ), //<--here is the log type of 'time'
    'file' => 'time', //<-- this will go to time.log
) );

Of course, that if you use other log types you will need to configure streams for those as well, otherwise the default catch-all stream will be configured for you and you will be having the same problem again.

Good luck!

Upvotes: 3

Related Questions