feat: add structured plugin logging system with admin log viewer

Introduces Peptide_News_Logger class with leveled logging (info, warning,
error, debug) to a custom DB table, auto-pruning at 2000 rows. Adds a
filterable, paginated log viewer to the admin settings page. Instruments
the LLM and Fetcher classes with structured log calls for fetch cycles,
AI processing, and error tracking. Version bumped to 2.1.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Terence Ong
2026-04-07 15:58:51 +07:00
parent e1d18ba86e
commit 6c57f6ca11
14 changed files with 1476 additions and 39 deletions

View File

@@ -44,11 +44,13 @@ class Peptide_News_Fetcher {
// Prevent overlapping fetch jobs.
$lock_key = 'peptide_news_fetch_lock';
if ( get_transient( $lock_key ) ) {
$this->log_error( 'Fetch already in progress. Skipping this cycle.' );
Peptide_News_Logger::warning( 'Fetch already in progress — skipping this cycle.', 'fetch' );
return;
}
set_transient( $lock_key, true, 300 ); // 5-minute lock.
Peptide_News_Logger::info( 'Fetch cycle started.', 'fetch' );
$articles = array();
// Fetch from RSS feeds.
@@ -89,6 +91,11 @@ class Peptide_News_Fetcher {
'new_stored' => $stored,
) );
Peptide_News_Logger::info( sprintf(
'Fetch complete: %d found, %d filtered out, %d new stored.',
$pre_filter_count, $filtered_out, $stored
), 'fetch' );
// Run AI analysis on newly fetched articles (keywords + summary).
if ( class_exists( 'Peptide_News_LLM' ) && Peptide_News_LLM::is_enabled() ) {
$llm_batch_size = absint( get_option( 'peptide_news_llm_max_articles', 10 ) );