programmatically saving a node doesn't add any record to dblog When I call node_save to save a node, no record for "a new node has been saved.." is added to watchdog.

Is this normal? If yes, how do I also add a watchdog record? (without calling the watchdog function directly)
The reason that the save operation is not logged during node_save is because it is done during the node form submission process by node_form_submit which internally uses node_save.

Please refer this elaborate and well-written response of saving the node using drupal_form_submit answered by user Francisco Luz. Pasting the code for the sake of completion here for saving an article resulting in both the watchdog logging and the drupal_set_message of the acknowledgement.

global $user;
module_load_include('inc', 'node', 'node.pages');

$node = (object) array(
  'uid' =&gt; $user-&gt;uid,
  'name' =&gt; $user-&gt;name,
  'type' =&gt; 'article',
  'language' =&gt; 'und',
);
node_object_prepare($node);

// Get default values from attached fields.
$fields = field_info_instances('node');
$form_state = array();
foreach($fields['article'] as $field_name =&gt; $values) {
  $form_state['values'][$field_name] = array('und' =&gt; array());
}

// Add the $form_state field values.
$form_state['values']['title'] = 'my title';
$form_state['values']['body']['und'][0] = array(
  'value' =&gt; 'my body',
  'format' =&gt; 'full_html',
);
//$form_state['values']['field_MYFIELD']['und'][0]['value'] = 'blah blah';

// Without this line, not quite sure why, it wont work.
$form_state['values']['op'] = t('Save');

drupal_form_submit('article_node_form', $form_state, $node);

// Tell watchdog if any of the fields fail validation.
$errors = form_get_errors();
if (!empty($errors)) {
  foreach ($errors as $field_name =&gt; $message) {
    watchdog('MYMODULE', '%field: %message', 
      array('%message'=&gt; $message, '%field' =&gt; $field_name));
  }
}


I did run this once with devel php console and it logged the node during the node creation. Hope this helps.