Changeset 3751127
- Timestamp:
- 10/16/2026 09:04:47 PM (23 hours ago)
- Location:
- likoton-debug-logs/trunk
- Files:
-
- 24 edited
-
assets/admin.css (modified) (1 diff)
-
assets/admin.js (modified) (7 diffs)
-
includes/class-likoton-debug-logs-admin.php (modified) (14 diffs)
-
includes/class-likoton-debug-logs-installer.php (modified) (4 diffs)
-
includes/class-likoton-debug-logs-logger.php (modified) (1 diff)
-
languages/likoton-debug-logs-cs_CZ.mo (modified) ( previous)
-
languages/likoton-debug-logs-cs_CZ.po (modified) (2 diffs)
-
languages/likoton-debug-logs-de_DE.mo (modified) ( previous)
-
languages/likoton-debug-logs-de_DE.po (modified) (2 diffs)
-
languages/likoton-debug-logs-en_US.mo (modified) ( previous)
-
languages/likoton-debug-logs-en_US.po (modified) (2 diffs)
-
languages/likoton-debug-logs-es_ES.mo (modified) ( previous)
-
languages/likoton-debug-logs-es_ES.po (modified) (2 diffs)
-
languages/likoton-debug-logs-fr_FR.mo (modified) ( previous)
-
languages/likoton-debug-logs-fr_FR.po (modified) (2 diffs)
-
languages/likoton-debug-logs-pl_PL.mo (modified) ( previous)
-
languages/likoton-debug-logs-pl_PL.po (modified) (2 diffs)
-
languages/likoton-debug-logs-pt_PT.mo (modified) ( previous)
-
languages/likoton-debug-logs-pt_PT.po (modified) (2 diffs)
-
languages/likoton-debug-logs-sk_SK.mo (modified) ( previous)
-
languages/likoton-debug-logs-sk_SK.po (modified) (2 diffs)
-
languages/likoton-debug-logs.pot (modified) (2 diffs)
-
likoton-debug-logs.php (modified) (1 diff)
-
readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
likoton-debug-logs/trunk/assets/admin.css
r3717902 r3751127 619 619 } 620 620 621 .wp-list-table tr { 622 display:table-row; 623 } 624 621 625 .ldl-date-range.is-visible { 622 626 flex-direction: column; -
likoton-debug-logs/trunk/assets/admin.js
r3717902 r3751127 11 11 const ajaxUrl = window.ajaxurl || (window.wp && wp.ajax && wp.ajax.settings && wp.ajax.settings.url); 12 12 13 var SORT_ KEY = 'likoton_debug_logs_sort';14 15 function saveSort(colIndex, asc) {16 try { sessionStorage.setItem(SORT_KEY, JSON.stringify({ col: colIndex, asc: asc })); } catch(e) {}17 }18 19 function loadSort() {20 try { var r = sessionStorage.getItem(SORT_KEY); return r ? JSON.parse(r) : null; } catch(e) { return null; }21 }22 23 function applySortToTable(colIndex, asc) {24 var $table = $('#ldl-logs-table');25 if (!$table.length) return;26 var $tbody = $table.find('tbody');27 var $headers = $ table.find('th');13 var SORT_COLUMNS = ['id', 'level', 'source', 'message', 'created_at']; 14 15 // Sorting is done server-side (ORDER BY) and the current orderby/order is 16 // remembered per-user on the server (like the other filters), so the hidden 17 // fields below always already reflect the correct state on page load — no 18 // client-side storage or "fix up after the fact" reload is needed here. 19 function applySortIndicator() { 20 var orderby = $('#ldl-orderby').val() || 'created_at'; 21 var order = $('#ldl-order').val() || 'desc'; 22 var colIndex = SORT_COLUMNS.indexOf(orderby); 23 if (colIndex === -1) { 24 colIndex = SORT_COLUMNS.length - 1; 25 } 26 var asc = order === 'asc'; 27 var $headers = $('#ldl-logs-table th'); 28 28 $headers.removeClass('sorted-asc sorted-desc sorted-column'); 29 29 $headers.eq(colIndex).addClass(asc ? 'sorted-asc' : 'sorted-desc').addClass('sorted-column'); 30 var rows = $tbody.find('tr').get();31 rows.sort(function (a, b) {32 var A = $(a).children('td').eq(colIndex).text().toUpperCase();33 var B = $(b).children('td').eq(colIndex).text().toUpperCase();34 return asc ? A.localeCompare(B) : B.localeCompare(A);35 });36 $.each(rows, function (i, row) { $tbody.append(row); });37 }38 39 function applyDefaultDateSort() {40 var saved = loadSort();41 if (saved !== null) {42 applySortToTable(saved.col, saved.asc);43 } else {44 var $dateHeader = $('#ldl-logs-table th.column-date');45 if ($dateHeader.length) {46 var colIndex = $dateHeader.index();47 applySortToTable(colIndex, false);48 saveSort(colIndex, false);49 }50 }51 30 } 52 31 … … 65 44 if ($newTable.length) { 66 45 $('#ldl-logs-table').replaceWith($newTable); 67 apply DefaultDateSort();46 applySortIndicator(); 68 47 } 69 48 scrollPage = 1; … … 357 336 }); 358 337 338 $settingsForm.on('change', 'select[name="likoton_debug_logs_dedup_interval"]', function () { 339 saveSettings(showToast); 340 }); 341 359 342 $settingsForm.on('change', '#likoton_debug_logs_dark_mode', function () { 360 343 saveSettings(function () { … … 379 362 var colIndex = $(this).index(); 380 363 var asc = !$(this).hasClass('sorted-asc'); 381 applySortToTable(colIndex, asc); 382 saveSort(colIndex, asc); 364 $('#ldl-orderby').val(SORT_COLUMNS[colIndex] || 'created_at'); 365 $('#ldl-order').val(asc ? 'asc' : 'desc'); 366 applySortIndicator(); 367 reloadTable(); 383 368 }); 384 369 385 apply DefaultDateSort();370 applySortIndicator(); 386 371 387 372 function showToast() { … … 417 402 $(document).ajaxComplete(function () { 418 403 initClearSearch(); 419 apply DefaultDateSort();404 applySortIndicator(); 420 405 }); 421 406 … … 469 454 source: filterValue('source'), 470 455 last: filterValue('last') || 50, 456 orderby: filterValue('orderby'), 457 order: filterValue('order'), 471 458 likoton_debug_logs_nonce: likotonDebugLogsData.nonce 472 459 }, function (response) { … … 515 502 if ($newTable.length) { 516 503 $('#ldl-logs-table').replaceWith($newTable); 517 apply DefaultDateSort();504 applySortIndicator(); 518 505 } 519 506 }); -
likoton-debug-logs/trunk/includes/class-likoton-debug-logs-admin.php
r3717902 r3751127 35 35 } 36 36 37 /* Allowed values (in seconds) for the "don't log identical errors more often than" setting. 0 = no limit. */ 38 public static function get_dedup_intervals() { 39 return [ 0, 10, 30, 60, 900, 1800, 3600 ]; 40 } 41 37 42 /* Schedules */ 38 43 public static function add_schedules( $schedules ) { … … 67 72 : '1m'; 68 73 74 $dedup_interval = isset( $_POST['likoton_debug_logs_dedup_interval'] ) 75 ? (int) $_POST['likoton_debug_logs_dedup_interval'] 76 : 0; 77 78 if ( ! in_array( $dedup_interval, self::get_dedup_intervals(), true ) ) { 79 $dedup_interval = 0; 80 } 81 69 82 $levels = isset( $_POST['likoton_debug_logs_enabled_levels'] ) 70 83 ? array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['likoton_debug_logs_enabled_levels'] ) ) 71 84 : []; 72 85 73 86 update_option( 'likoton_debug_logs_enabled_levels', $levels ); 74 87 update_option( 'likoton_debug_logs_dark_mode', $dark_mode ); 75 88 update_option( 'likoton_debug_logs_capability', $capability ); 76 89 update_option( 'likoton_debug_logs_retention', $retention ); 90 update_option( 'likoton_debug_logs_dedup_interval', $dedup_interval ); 77 91 78 92 wp_clear_scheduled_hook( 'likoton_debug_logs_cleanup_logs' ); … … 124 138 } 125 139 140 [ $orderby, $order ] = self::get_sort_args(); 141 126 142 $logs = Likoton_Debug_Logs_Installer::get_logs( [ 127 143 'search' => $search, … … 131 147 'per_page' => $per_page, 132 148 'since' => $time_windowed ? self::compute_since( $last_raw ) : '', 149 'orderby' => $orderby, 150 'order' => $order, 133 151 ] ); 134 152 … … 279 297 : '1m'; 280 298 299 $dedup_interval = isset( $_POST['likoton_debug_logs_dedup_interval'] ) 300 ? (int) $_POST['likoton_debug_logs_dedup_interval'] 301 : 0; 302 303 if ( ! in_array( $dedup_interval, self::get_dedup_intervals(), true ) ) { 304 $dedup_interval = 0; 305 } 306 281 307 $levels = isset( $_POST['likoton_debug_logs_enabled_levels'] ) 282 308 ? array_map( 'sanitize_text_field', wp_unslash( (array) $_POST['likoton_debug_logs_enabled_levels'] ) ) … … 287 313 update_option( 'likoton_debug_logs_capability', $capability ); 288 314 update_option( 'likoton_debug_logs_retention', $retention ); 315 update_option( 'likoton_debug_logs_dedup_interval', $dedup_interval ); 289 316 290 317 $enabled_levels = $levels; 291 318 } 292 319 293 $dark_mode = (bool) get_option( 'likoton_debug_logs_dark_mode', 0 ); 294 $capability = get_option( 'likoton_debug_logs_capability', 'manage_options' ); 295 $retention = get_option( 'likoton_debug_logs_retention', '1m' ); 320 $dark_mode = (bool) get_option( 'likoton_debug_logs_dark_mode', 0 ); 321 $capability = get_option( 'likoton_debug_logs_capability', 'manage_options' ); 322 $retention = get_option( 'likoton_debug_logs_retention', '1m' ); 323 $dedup_interval = (int) get_option( 'likoton_debug_logs_dedup_interval', 0 ); 296 324 297 325 ?> … … 350 378 </tr> 351 379 380 <!-- Duplicate log throttling --> 381 <tr> 382 <th scope="row"><?php esc_html_e( "Don't log identical errors more often than every:", 'likoton-debug-logs' ); ?></th> 383 <td> 384 <select name="likoton_debug_logs_dedup_interval"> 385 <option value="0" <?php selected( $dedup_interval, 0 ); ?>><?php esc_html_e( 'No limit', 'likoton-debug-logs' ); ?></option> 386 <option value="10" <?php selected( $dedup_interval, 10 ); ?>><?php esc_html_e( '10 seconds', 'likoton-debug-logs' ); ?></option> 387 <option value="30" <?php selected( $dedup_interval, 30 ); ?>><?php esc_html_e( '30 seconds', 'likoton-debug-logs' ); ?></option> 388 <option value="60" <?php selected( $dedup_interval, 60 ); ?>><?php esc_html_e( '1 minute', 'likoton-debug-logs' ); ?></option> 389 <option value="900" <?php selected( $dedup_interval, 900 ); ?>><?php esc_html_e( '15 minutes', 'likoton-debug-logs' ); ?></option> 390 <option value="1800" <?php selected( $dedup_interval, 1800 ); ?>><?php echo esc_html( _x( '30 minutes', 'dedup interval', 'likoton-debug-logs' ) ); ?></option> 391 <option value="3600" <?php selected( $dedup_interval, 3600 ); ?>><?php echo esc_html( _x( '1 hour', 'dedup interval', 'likoton-debug-logs' ) ); ?></option> 392 </select> 393 <p class="description"><?php esc_html_e( 'Skips writing a new log row when the same level, source and message was already logged within this time window.', 'likoton-debug-logs' ); ?></p> 394 </td> 395 </tr> 396 352 397 <!-- Segmented Control --> 353 398 <tr> … … 487 532 } 488 533 534 /* Sanitize the requested sort column/direction against a whitelist. */ 535 private static function get_sort_args( $default_orderby = 'created_at', $default_order = 'desc' ) { 536 $allowed_orderby = [ 'id', 'level', 'source', 'message', 'created_at' ]; 537 538 if ( ! in_array( $default_orderby, $allowed_orderby, true ) ) { 539 $default_orderby = 'created_at'; 540 } 541 542 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only sort preference, no state change 543 $orderby = isset( $_GET['orderby'] ) ? sanitize_key( wp_unslash( $_GET['orderby'] ) ) : $default_orderby; 544 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only sort preference, no state change 545 $order = isset( $_GET['order'] ) ? sanitize_key( wp_unslash( $_GET['order'] ) ) : $default_order; 546 547 if ( ! in_array( $orderby, $allowed_orderby, true ) ) { 548 $orderby = 'created_at'; 549 } 550 551 $order = ( 'asc' === strtolower( $order ) ) ? 'ASC' : 'DESC'; 552 553 return [ $orderby, $order ]; 554 } 555 489 556 /* Format UTC date to local WordPress time */ 490 557 public static function format_local_date( $utc_string ) { … … 602 669 // phpcs:enable WordPress.Security.NonceVerification.Recommended 603 670 671 [ $remembered_orderby, $remembered_order ] = self::get_sort_args(); 672 604 673 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only flag, no state change itself 605 674 $is_auto_refresh = isset( $_GET['auto_refresh'] ); … … 613 682 'date_from' => $date_from, 614 683 'date_to' => $date_to, 684 'orderby' => $remembered_orderby, 685 'order' => $remembered_order, 615 686 ] ); 616 687 } … … 625 696 $date_from = isset( $remembered['date_from'] ) ? $remembered['date_from'] : ''; 626 697 $date_to = isset( $remembered['date_to'] ) ? $remembered['date_to'] : ''; 698 699 $remembered_orderby = isset( $remembered['orderby'] ) ? $remembered['orderby'] : 'created_at'; 700 $remembered_order = isset( $remembered['order'] ) ? $remembered['order'] : 'desc'; 627 701 } 628 702 … … 654 728 } 655 729 730 [ $orderby, $order ] = self::get_sort_args( $remembered_orderby, $remembered_order ); 731 656 732 $logs = Likoton_Debug_Logs_Installer::get_logs( [ 657 733 'search' => $search, … … 663 739 'date_to' => $last_raw === 'range' ? $date_to : '', 664 740 'since' => $time_windowed ? self::compute_since( $last_raw ) : '', 741 'orderby' => $orderby, 742 'order' => $order, 665 743 ] ); 666 744 ?> 667 745 <form id="ldl-filters" method="get" action="<?php echo esc_url( admin_url( 'admin.php' ) ); ?>"> 668 746 <input type="hidden" name="page" value="likoton-debug-logs-logs" /> 747 <input type="hidden" name="orderby" id="ldl-orderby" value="<?php echo esc_attr( $orderby ); ?>" /> 748 <input type="hidden" name="order" id="ldl-order" value="<?php echo esc_attr( strtolower( $order ) ); ?>" /> 669 749 670 750 <div class="ldl-filters"> … … 735 815 </div> 736 816 817 <?php 818 $sort_class = function ( $column ) use ( $orderby, $order ) { 819 if ( $column !== $orderby ) { 820 return ''; 821 } 822 return ' sorted-column ' . ( 'ASC' === $order ? 'sorted-asc' : 'sorted-desc' ); 823 }; 824 ?> 737 825 <div class="ldl-logs-wrapper"> 738 826 <table id="ldl-logs-table" class="wp-list-table widefat fixed striped ldl-logs"> 739 827 <thead> 740 828 <tr> 741 <th class="column-id ">ID</th>742 <th class="column-level "><?php esc_html_e( 'Level', 'likoton-debug-logs' ); ?></th>743 <th class="column-source "><?php esc_html_e( 'Source', 'likoton-debug-logs' ); ?></th>744 <th class="column-message "><?php esc_html_e( 'Message', 'likoton-debug-logs' ); ?></th>745 <th class="column-date "><?php esc_html_e( 'Date', 'likoton-debug-logs' ); ?></th>829 <th class="column-id<?php echo esc_attr( $sort_class( 'id' ) ); ?>">ID</th> 830 <th class="column-level<?php echo esc_attr( $sort_class( 'level' ) ); ?>"><?php esc_html_e( 'Level', 'likoton-debug-logs' ); ?></th> 831 <th class="column-source<?php echo esc_attr( $sort_class( 'source' ) ); ?>"><?php esc_html_e( 'Source', 'likoton-debug-logs' ); ?></th> 832 <th class="column-message<?php echo esc_attr( $sort_class( 'message' ) ); ?>"><?php esc_html_e( 'Message', 'likoton-debug-logs' ); ?></th> 833 <th class="column-date<?php echo esc_attr( $sort_class( 'created_at' ) ); ?>"><?php esc_html_e( 'Date', 'likoton-debug-logs' ); ?></th> 746 834 </tr> 747 835 </thead> -
likoton-debug-logs/trunk/includes/class-likoton-debug-logs-installer.php
r3717902 r3751127 65 65 ] ); 66 66 } 67 68 if ( get_option( 'likoton_debug_logs_dedup_interval', null ) === null ) { 69 update_option( 'likoton_debug_logs_dedup_interval', 0 ); 70 } 67 71 } 68 72 … … 109 113 'date_to' => '', 110 114 'since' => '', 115 'orderby' => 'created_at', 116 'order' => 'DESC', 111 117 ]; 112 118 $args = wp_parse_args( $args, $defaults ); … … 122 128 $since = sanitize_text_field( $args['since'] ); 123 129 130 // Only known columns may reach the ORDER BY clause. 131 $allowed_orderby = [ 'id', 'level', 'source', 'message', 'created_at' ]; 132 $orderby = in_array( $args['orderby'], $allowed_orderby, true ) ? $args['orderby'] : 'created_at'; 133 $order = strtoupper( $args['order'] ) === 'ASC' ? 'ASC' : 'DESC'; 134 124 135 // Table name is built from $wpdb->prefix + a hardcoded constant — safe to use with esc_sql. 125 136 $table = esc_sql( $wpdb->prefix . self::TABLE_NAME ); … … 194 205 $params[] = $offset; 195 206 207 // $orderby is whitelisted above; add id as a stable tiebreaker for non-unique columns. 208 $order_sql = "{$orderby} {$order}"; 209 if ( 'id' !== $orderby ) { 210 $order_sql .= ", id {$order}"; 211 } 212 196 213 // $table: esc_sql( $wpdb->prefix . CONSTANT ) — safe. 197 214 // $levels_in: esc_sql() applied to each element individually — safe. 198 215 // $where_extra: literal SQL with %s/%d placeholders only — safe. 216 // $order_sql: built only from the whitelisted $orderby/$order above — safe. 199 217 // No intermediate variable used — PHPCS tracks variable assignment as unsafe. 200 return $wpdb->get_results( $wpdb->prepare( "SELECT * FROM `{$table}` WHERE level IN ( {$levels_in} ){$where_extra} ORDER BY id DESCLIMIT %d OFFSET %d", $params ) );218 return $wpdb->get_results( $wpdb->prepare( "SELECT * FROM `{$table}` WHERE level IN ( {$levels_in} ){$where_extra} ORDER BY {$order_sql} LIMIT %d OFFSET %d", $params ) ); 201 219 } 202 220 // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber, PluginCheck.Security.DirectDB.UnescapedDBParameter -
likoton-debug-logs/trunk/includes/class-likoton-debug-logs-logger.php
r3647996 r3751127 60 60 $level = 'info'; 61 61 } 62 } 63 64 $dedup_interval = (int) get_option( 'likoton_debug_logs_dedup_interval', 0 ); 65 66 if ( $dedup_interval > 0 ) { 67 // Transients live in wp_options (or an external object cache), never in the 68 // (potentially huge) logs table, so this check stays cheap regardless of log volume. 69 $dedup_key = 'ldl_dedup_' . md5( $level . '|' . $source . '|' . $message ); 70 71 if ( false !== get_transient( $dedup_key ) ) { 72 return; 73 } 74 75 set_transient( $dedup_key, 1, $dedup_interval ); 62 76 } 63 77 -
likoton-debug-logs/trunk/languages/likoton-debug-logs-cs_CZ.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 měsíc" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Neprotokolovat stejnou chybu častěji než jednou za:" 157 158 msgid "No limit" 159 msgstr "Bez omezení" 160 161 msgid "10 seconds" 162 msgstr "10 sekund" 163 164 msgid "30 seconds" 165 msgstr "30 sekund" 166 167 msgid "1 minute" 168 msgstr "1 minuta" 169 170 msgid "15 minutes" 171 msgstr "15 minut" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 min" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 hod." 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Přeskočí zápis nového záznamu, pokud stejná úroveň, zdroj a zpráva už byly zaznamenány v tomto časovém okně." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrátor (plný přístup)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-de_DE.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 Monat" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Identische Fehler nicht öfter protokollieren als alle:" 157 158 msgid "No limit" 159 msgstr "Kein Limit" 160 161 msgid "10 seconds" 162 msgstr "10 Sekunden" 163 164 msgid "30 seconds" 165 msgstr "30 Sekunden" 166 167 msgid "1 minute" 168 msgstr "1 Minute" 169 170 msgid "15 minutes" 171 msgstr "15 Minuten" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 Min." 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 Std." 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Überspringt das Schreiben eines neuen Log-Eintrags, wenn derselbe Level, dieselbe Quelle und dieselbe Nachricht innerhalb dieses Zeitfensters bereits protokolliert wurden." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrator (voller Zugriff)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-en_US.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 month" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Don't log identical errors more often than every:" 157 158 msgid "No limit" 159 msgstr "No limit" 160 161 msgid "10 seconds" 162 msgstr "10 seconds" 163 164 msgid "30 seconds" 165 msgstr "30 seconds" 166 167 msgid "1 minute" 168 msgstr "1 minute" 169 170 msgid "15 minutes" 171 msgstr "15 minutes" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 minutes" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 hour" 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Skips writing a new log row when the same level, source and message was already logged within this time window." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrator (full access)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-es_ES.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 mes" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "No registrar errores idénticos más a menudo que cada:" 157 158 msgid "No limit" 159 msgstr "Sin límite" 160 161 msgid "10 seconds" 162 msgstr "10 segundos" 163 164 msgid "30 seconds" 165 msgstr "30 segundos" 166 167 msgid "1 minute" 168 msgstr "1 minuto" 169 170 msgid "15 minutes" 171 msgstr "15 minutos" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 min" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 h" 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Omite escribir una nueva fila de registro cuando el mismo nivel, origen y mensaje ya se registraron dentro de esta ventana de tiempo." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrador (acceso completo)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-fr_FR.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 mois" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Ne pas enregistrer une erreur identique plus souvent que toutes les :" 157 158 msgid "No limit" 159 msgstr "Aucune limite" 160 161 msgid "10 seconds" 162 msgstr "10 secondes" 163 164 msgid "30 seconds" 165 msgstr "30 secondes" 166 167 msgid "1 minute" 168 msgstr "1 minute" 169 170 msgid "15 minutes" 171 msgstr "15 minutes" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 min" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 h" 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "N'enregistre pas une nouvelle ligne si le même niveau, la même source et le même message ont déjà été enregistrés dans cet intervalle de temps." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrateur (accès complet)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-pl_PL.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 138 138 msgstr "1 miesiąc" 139 139 140 msgid "Don't log identical errors more often than every:" 141 msgstr "Nie zapisuj identycznego błędu częściej niż raz na:" 142 143 msgid "No limit" 144 msgstr "Bez ograniczeń" 145 146 msgid "10 seconds" 147 msgstr "10 s" 148 149 msgid "30 seconds" 150 msgstr "30 s" 151 152 msgid "1 minute" 153 msgstr "1 min" 154 155 msgid "15 minutes" 156 msgstr "15 min" 157 158 msgctxt "dedup interval" 159 msgid "30 minutes" 160 msgstr "30 min" 161 162 msgctxt "dedup interval" 163 msgid "1 hour" 164 msgstr "1 godz." 165 166 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 167 msgstr "Pomija zapis nowego wpisu, jeśli ten sam poziom, źródło i wiadomość zostały już zapisane w tym przedziale czasu." 168 140 169 msgid "Administrator (full access)" 141 170 msgstr "Administrator (pełny dostęp)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-pt_PT.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 mês" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Não registar erros idênticos mais frequentemente do que a cada:" 157 158 msgid "No limit" 159 msgstr "Sem limite" 160 161 msgid "10 seconds" 162 msgstr "10 segundos" 163 164 msgid "30 seconds" 165 msgstr "30 segundos" 166 167 msgid "1 minute" 168 msgstr "1 minuto" 169 170 msgid "15 minutes" 171 msgstr "15 minutos" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 min" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 h" 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Ignora o registo de uma nova entrada quando o mesmo nível, origem e mensagem já foram registados dentro desta janela de tempo." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrador (acesso total)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs-sk_SK.po
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "POT-Creation-Date: \n" 5 5 "PO-Revision-Date: \n" … … 153 153 msgstr "1 mesiac" 154 154 155 msgid "Don't log identical errors more often than every:" 156 msgstr "Nezaznamenávať rovnakú chybu častejšie ako raz za:" 157 158 msgid "No limit" 159 msgstr "Bez obmedzenia" 160 161 msgid "10 seconds" 162 msgstr "10 sekúnd" 163 164 msgid "30 seconds" 165 msgstr "30 sekúnd" 166 167 msgid "1 minute" 168 msgstr "1 minúta" 169 170 msgid "15 minutes" 171 msgstr "15 minút" 172 173 msgctxt "dedup interval" 174 msgid "30 minutes" 175 msgstr "30 min" 176 177 msgctxt "dedup interval" 178 msgid "1 hour" 179 msgstr "1 hod." 180 181 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 182 msgstr "Preskočí zápis nového záznamu, ak rovnaká úroveň, zdroj a správa už boli zaznamenané v tomto časovom okne." 183 155 184 msgid "Administrator (full access)" 156 185 msgstr "Administrátor (plný prístup)" -
likoton-debug-logs/trunk/languages/likoton-debug-logs.pot
r3717902 r3751127 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: LiKoToN Debug Logs 1. 1.0\n"3 "Project-Id-Version: LiKoToN Debug Logs 1.3.0\n" 4 4 "Content-Type: text/plain; charset=UTF-8\n" 5 5 "Content-Transfer-Encoding: 8bit\n" … … 199 199 200 200 #: includes/class-likoton-debug-logs-admin.php 201 msgid "Don't log identical errors more often than every:" 202 msgstr "" 203 204 #: includes/class-likoton-debug-logs-admin.php 205 msgid "No limit" 206 msgstr "" 207 208 #: includes/class-likoton-debug-logs-admin.php 209 msgid "10 seconds" 210 msgstr "" 211 212 #: includes/class-likoton-debug-logs-admin.php 213 msgid "30 seconds" 214 msgstr "" 215 216 #: includes/class-likoton-debug-logs-admin.php 217 msgid "1 minute" 218 msgstr "" 219 220 #: includes/class-likoton-debug-logs-admin.php 221 msgid "15 minutes" 222 msgstr "" 223 224 #: includes/class-likoton-debug-logs-admin.php 225 msgctxt "dedup interval" 226 msgid "30 minutes" 227 msgstr "" 228 229 #: includes/class-likoton-debug-logs-admin.php 230 msgctxt "dedup interval" 231 msgid "1 hour" 232 msgstr "" 233 234 #: includes/class-likoton-debug-logs-admin.php 235 msgid "Skips writing a new log row when the same level, source and message was already logged within this time window." 236 msgstr "" 237 238 #: includes/class-likoton-debug-logs-admin.php 201 239 msgid "Administrator (full access)" 202 240 msgstr "" -
likoton-debug-logs/trunk/likoton-debug-logs.php
r3717902 r3751127 5 5 * Description: Collects and displays WordPress and PHP debug logs with filters, live view and dark mode 6 6 * Author: LiKoToN 7 * Version: 1. 2.07 * Version: 1.3.0 8 8 * License: GPLv3 9 9 * License URI: License URI: https://www.gnu.org/licenses/gpl-3.0-standalone.html -
likoton-debug-logs/trunk/readme.txt
r3717902 r3751127 4 4 Requires at least: 6.0 5 5 Tested up to: 7.1 6 Stable tag: 1. 2.06 Stable tag: 1.3.0 7 7 License: GPLv3 8 8 License URI: https://www.gnu.org/licenses/gpl-3.0-standalone.html … … 89 89 --- 90 90 91 ## Developer API 92 93 ### Custom logs 94 ```php 95 Likoton_Debug_Logs_Logger::log( 'info', 'custom_source', 'Something happened', [ 'extra' => 'data' ] ); 96 91 97 ## Supported log levels (PSR-3 + extended PHP levels): 92 98 … … 138 144 ## Changelog ## 139 145 146 1.3.0 147 - Add option to skip writing a new log row when the same level, source and message was already logged 148 140 149 1.2.0 141 150 - A date range selection filter has been added
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)