Issue #733054 by jhodgdon, mkalkbrenner, amitgoyal, ndewhurst: Fixed Watchdog logging of all searches is performance hit; need ability to turn it off.

8.0.x
Alex Pott 2014-07-18 19:47:24 +01:00
parent 9eba380589
commit 2b3cf006d7
5 changed files with 52 additions and 4 deletions

View File

@ -17,3 +17,4 @@ index:
strong: 3
em: 3
a: 10
logging: false

View File

@ -63,6 +63,9 @@ search.settings:
a:
type: integer
label: 'Tag a weight'
logging:
type: boolean
label: 'Log searches'
search.page.*:
type: config_entity

View File

@ -7,6 +7,7 @@
namespace Drupal\search\Controller;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Controller\ControllerBase;
use Drupal\search\SearchPageInterface;
use Drupal\search\SearchPageRepositoryInterface;
@ -25,14 +26,24 @@ class SearchController extends ControllerBase {
*/
protected $searchPageRepository;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactory
*/
protected $configFactory;
/**
* Constructs a new search controller.
*
* @param \Drupal\search\SearchPageRepositoryInterface $search_page_repository
* The search page repository.
* @param \Drupal\Core\Config\ConfigFactory $factory
* The configuration factory object.
*/
public function __construct(SearchPageRepositoryInterface $search_page_repository) {
public function __construct(SearchPageRepositoryInterface $search_page_repository, ConfigFactory $factory) {
$this->searchPageRepository = $search_page_repository;
$this->configFactory = $factory;
}
/**
@ -40,7 +51,8 @@ class SearchController extends ControllerBase {
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('search.search_page_repository')
$container->get('search.search_page_repository'),
$container->get('config.factory')
);
}
@ -75,7 +87,9 @@ class SearchController extends ControllerBase {
if ($request->query->has('keys')) {
if ($plugin->isSearchExecutable()) {
// Log the search.
watchdog('search', 'Searched %type for %keys.', array('%keys' => $keys, '%type' => $entity->label()), WATCHDOG_NOTICE);
if ($this->configFactory->get('search.settings')->get('logging')) {
watchdog('search', 'Searched %type for %keys.', array('%keys' => $keys, '%type' => $entity->label()), WATCHDOG_NOTICE);
}
// Collect the search results.
$results = $plugin->buildResults();

View File

@ -223,6 +223,20 @@ class SearchPageListBuilder extends DraggableListBuilder implements FormInterfac
'#description' => $this->t('Whether to apply a simple Chinese/Japanese/Korean tokenizer based on overlapping sequences. Turn this off if you want to use an external preprocessor for this instead. Does not affect other languages.')
);
// Indexing settings:
$form['logging'] = array(
'#type' => 'details',
'#title' => $this->t('Logging'),
'#open' => TRUE,
);
$form['logging']['logging'] = array(
'#type' => 'checkbox',
'#title' => $this->t('Log searches'),
'#default_value' => $search_settings->get('logging'),
'#description' => $this->t('If checked, all searches will be logged. Uncheck to skip logging. Logging may affect performance.'),
);
$form['search_pages'] = array(
'#type' => 'details',
'#title' => $this->t('Search pages'),
@ -320,6 +334,7 @@ class SearchPageListBuilder extends DraggableListBuilder implements FormInterfac
$search_settings
->set('index.cron_limit', $form_state['values']['cron_limit'])
->set('logging', $form_state['values']['logging'])
->save();
drupal_set_message($this->t('The configuration options have been saved.'));

View File

@ -39,7 +39,7 @@ class SearchConfigSettingsFormTest extends SearchTestBase {
parent::setUp();
// Login as a user that can create and search content.
$this->search_user = $this->drupalCreateUser(array('search content', 'administer search', 'administer nodes', 'bypass node access', 'access user profiles', 'administer users', 'administer blocks'));
$this->search_user = $this->drupalCreateUser(array('search content', 'administer search', 'administer nodes', 'bypass node access', 'access user profiles', 'administer users', 'administer blocks', 'access site reports'));
$this->drupalLogin($this->search_user);
// Add a single piece of content and index it.
@ -85,6 +85,21 @@ class SearchConfigSettingsFormTest extends SearchTestBase {
);
$this->drupalPostForm('admin/config/search/pages', $edit, t('Save configuration'));
$this->assertNoText(t('The configuration options have been saved.'), 'Form does not save with an invalid word length.');
// Test logging setting. It should be off by default.
$text = $this->randomName(5);
$this->drupalPostForm('search/node', array('keys' => $text), t('Search'));
$this->drupalGet('admin/reports/dblog');
$this->assertNoLink('Searched Content for ' . $text . '.', 'Search was not logged');
// Turn on logging.
$edit = array('logging' => TRUE);
$this->drupalPostForm('admin/config/search/pages', $edit, t('Save configuration'));
$text = $this->randomName(5);
$this->drupalPostForm('search/node', array('keys' => $text), t('Search'));
$this->drupalGet('admin/reports/dblog');
$this->assertLink('Searched Content for ' . $text . '.', 0, 'Search was logged');
}
/**