Очистка журнала


В разделе system->config->sytem->log cleaning есть опция очистки журнала. Очищает ли он таблицы журналов или файлы в разделе var/log. Если я включу очистку журналов, как узнать, когда и какие журналы будут очищены?

Author: blakcaps, 2013-01-25

3 answers

Magento по умолчанию не очищает все, как упоминал Тим.

Ознакомьтесь с моим подробным ответом Как мне обрабатывать файлы сеансов, которых становится слишком много?. Он включает файл обслуживания, который можно автоматизировать с помощью заданий cron.

Источник: Как мне обрабатывать файлы сеансов, которых становится слишком много?

На всех наших установках у нас есть maintenance.php файл, который заботится об очистке журналов и каталога var один раз в какое-то время. Поскольку сеансы должны быть сохранены либо в базе данных, либо в файловой системе, этот файл обслуживания очистит их оба. (См. Код ниже).

Вы можете выполнить следующую команду в качестве задания cron для очистки журналов:

php maintenance.php clean=log

Приведенная выше команда приведет к следующему результату:

catalogindex_aggregation has been truncated
catalogindex_aggregation_tag has been truncated
catalogindex_aggregation_to_tag has been truncated
catalog_compare_item has been truncated
dataflow_batch_export has been truncated
dataflow_batch_import has been truncated
log_customer has been truncated
log_quote has been truncated
log_summary has been truncated
log_summary_type has been truncated
log_url has been truncated
log_url_info has been truncated
log_visitor has been truncated
log_visitor_info has been truncated
log_visitor_online has been truncated
report_compared_product_index has been truncated
report_event has been truncated
report_viewed_product_index has been truncated

Вы можете выполнить следующую команду в качестве задания cron для очистки папки var:

php maintenance.php clean=var

Приведенная выше команда приведет к следующий вывод:

downloader/.cache/* has been emptied
downloader/pearlib/cache/* has been emptied
downloader/pearlib/download/* has been emptied
var/cache/ has been emptied
var/locks/ has been emptied
var/log/ has been emptied
var/report/ has been emptied
var/session/ has been emptied
var/tmp/ has been emptied

Фактический код (не забудьте настроить путь к вашему local.xml файл):

<?php
$xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);

$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$db['pref'] = $xml->global->resources->db->table_prefix;

if (!isset($argv[1]) || !stristr($argv[1], 'clean=')) {
    echo 'Please use one of the commands below:' . PHP_EOL;
    echo 'php maintenance.php clean=log' . PHP_EOL;
    echo 'php maintenance.php clean=var' . PHP_EOL;
    die;
}

$method = str_replace('clean=', '', $argv[1]);

switch ($method) {
case 'log':
    clean_log_tables();
    break;
case 'var':
    clean_var_directory();
    break;
default:
    echo 'Please use one of the commands below:' . PHP_EOL;
    echo 'php maintenance.php clean=log' . PHP_EOL;
    echo 'php maintenance.php clean=var' . PHP_EOL;
    break;
}

function clean_log_tables() {
    global $db;

    $tables = array(
        'catalogindex_aggregation',
        'catalogindex_aggregation_tag',
        'catalogindex_aggregation_to_tag',
        'catalog_compare_item',
        'dataflow_batch_export',
        'dataflow_batch_import',
        'log_customer',
        'log_quote',
        'log_summary',
        'log_summary_type',
        'log_url',
        'log_url_info',
        'log_visitor',
        'log_visitor_info',
        'log_visitor_online',
        'report_compared_product_index',
        'report_event',
        'report_viewed_product_index'
    );

    mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
    mysql_select_db($db['name']) or die(mysql_error());

    foreach($tables as $v => $k) {
        @mysql_query('TRUNCATE `'.$db['pref'].$k.'`');
        echo $db['pref'] . $k . ' has been truncated' . PHP_EOL;
    }
}

function clean_var_directory() {
    $dirs = array(
        'downloader/.cache/*',
        'downloader/pearlib/cache/*',
        'downloader/pearlib/download/*',
        'var/cache/',
        'var/locks/',
        'var/log/',
        'var/report/',
        'var/session/',
        'var/tmp/'
    );

    foreach($dirs as $v => $k) {
        exec('rm -rf '.$k);
        echo $k . ' has been emptied' . PHP_EOL;
    }
}
 3
Author: Kenny, 2017-04-13 12:55:05

По умолчанию Magento очищает только следующие таблицы:

log_quote
log_url
log_visitor_info
log_visitor
log_url_info
log_customer

, которые на самом деле являются не всеми таблицами ^log*.

var/log каталог не очищен. Я думаю, причина в том, что было бы ужасно пытаться определить, какие записи журнала истекли и должны быть удалены.

Однако вы можете делать все, что вам нравится, наблюдая за событиями log_log_clean_before или log_log_clean_after и выполняя что-то вроде:

$dirs = array(
    'downloader/.cache/*',               // MagentoConnect 2.0
    'downloader/pearlib/cache/*',        // MagentoConnect 1.0
    'downloader/pearlib/download/*',     // MagentoConnect 1.0
    'var/cache/',
    'var/log/',
    'var/report/',
    'var/tmp/'
);

exec('rm -rf ' . implode(' ', $dirs));
 8
Author: user487772, 2013-01-25 06:47:19

Используя этот способ, вы должны вручную очистить журнал или автоматически:

Система > Конфигурация > Дополнительно > Система > Очистка журнала

В Magento нет класса для управления файлами var/log, только запись.

 0
Author: Anthony, 2017-10-13 05:59:04