3

我有一个奇怪的问题,这可能很愚蠢,但我找不到问题出在哪里。我在 cakephp 2.x 上开发了一个应用程序,当我从控制器记录数据时,它在日志中出现了两次。像这样的东西:

  • 2013-05-24 11:50:19 调试:上传excel文件
  • 2013-05-24 11:50:19 调试:上传excel文件
  • 2013-05-24 11:50:19 调试:防火测试
  • 2013-05-24 11:50:19 调试:防火测试

只是为了增加一些乐趣,它不会发生在该控制器的所有功能中,只有六分之二。这让我很恼火,我不知道应该用什么方法来摆脱它。有任何想法吗?

编辑:好的,我发现当我以一种方法登录到两个不同的文件时会发生这种情况。当我换行时: CakeLog::write('time'....); 到 CakeLog::write('debug'....); 一切正常。就像在下面的方法中一样:

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';
        }
    }
}

我想这与 bootstrap.php 中的日志文件声明有关。所以这不是什么大问题,只是烦人。

4

1 回答 1

3

发生这种情况是因为您的电话

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

将尝试写入类型为“时间”的日志。由于没有配置流来处理,CakeLog 将为您创建一个“默认”流来处理此日志调用。

问题是,从现在开始,您将配置一个“默认”流,它将捕获所有日志并将它们加倍以用于调试和错误日志。

解决方案是在 bootstrap.php 文件中正确配置日志,如下所示:

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
) );

当然,如果您使用其他日志类型,您也需要为它们配置流,否则将为您配置默认的包罗万象的流,您将再次遇到同样的问题。

祝你好运!

于 2013-08-21T14:16:01.680 回答