# Naplózás és hibakeresés

> A naplózás bekapcsolása, a naplófájlok megtekintése és törlése, a biztonsági figyelmeztetés, valamint saját naplóbejegyzések írása.

A Gravity Forms naplója megmutatja, mit csinált a bővítmény egy beküldés, egy értesítés vagy egy licencellenőrzés közben. Hibakereséskor ez az első eszköz, amit érdemes bekapcsolni.

Ha szerepkörkezelő bővítményt használsz (például Members), a felhasználódnak meg kell kapnia a naplózáshoz szükséges jogosultságot, különben nem látod a beállításokat.

## A naplózás bekapcsolása

1. Nyisd meg az **Űrlapok → Beállítások** oldalt.
2. Görgess a **Naplózás** kártyához, és kapcsold be a kapcsolót.
3. Kattints a **Beállítások mentése** gombra.

![Az Űrlapok beállításai oldal, a Naplózás kártyán bekapcsolt kapcsolóval](./kepek/hibaelharitas-naplozas-beallitas.webp)

*Az Űrlapok beállításai oldal, a Naplózás kártyán bekapcsolt kapcsolóval* (https://minta-bolt.hu/wp-admin/admin.php?page=gf_settings)

Figyeld a **Naplózás** kártyát: a bekapcsolás után az oldalsó menüben új pont jelenik meg a naplózás beállításaihoz.

## A naplózás beállításai

A bekapcsolás után a **Beállítások** oldalsó menüjében új menüpont jelenik meg a naplózáshoz. Ezen az oldalon a Gravity Forms magja és minden telepített, naplózást támogató kiegészítő külön szerepel. Mindegyiknél külön be- és kikapcsolhatod a naplózást a **Naplózás bekapcsolása és az összes üzenet naplózása** jelölőnégyzettel.

![A naplózás beállítóoldala a Gravity Forms Core és a többi naplózó elem jelölőnégyzeteivel](./kepek/hibaelharitas-naplozas-lista.webp)

*A naplózás beállítóoldala a Gravity Forms Core és a többi naplózó elem jelölőnégyzeteivel* (https://minta-bolt.hu/wp-admin/admin.php?page=gf_settings&subview=gravityformslogging)

Figyeld, hogy minden naplózható elem külön jelölőnégyzetet kap. Ha már tudod, hol a hiba, kapcsold be az érintett kiegészítőét is.

## A naplók megtekintése

A naplózás oldalán minden bekapcsolt elem alatt két hivatkozás jelenik meg: a napló megtekintése és a napló törlése. Ha a napló még üres, a megtekintő hivatkozás nem látszik.

A naplófájlok legfeljebb 5 MB méretűek. Ha egy fájl ennél nagyobbra nő, a rendszer átnevezi, és az eredeti néven új fájlt kezd. A régi, elforgatott fájlokat FTP-vel töltheted le a `/wp-content/uploads/gravity_forms/logs/` mappából.

A **Rendszerállapot** oldalon is van hivatkozás a naplófájlokhoz, ha a naplózás be van kapcsolva és vannak fájlok.

## Figyelmeztető üzenet

Amíg a naplózás be van kapcsolva, minden WordPress-admin oldalon megjelenik egy nem elrejthető biztonsági figyelmeztetés. A naplók nyílt szövegben érzékeny és személyes adatot is tartalmazhatnak, ezért a naplózást nem szabad bekapcsolva hagyni.

- Ha a naplózást támogatási kérés miatt kapcsoltad be, hagyd bekapcsolva, amíg a támogatás dolgozik rajta, utána kapcsold ki, és töröld a naplókat.
- A figyelmeztetést elrejtheted, ha kikapcsolod a naplózást, vagy ha a `wp-config.php` fájlba felveszed az alábbi sort:

```php
define( 'GF_LOGGING_DISABLE_NOTICE', true );
```

A Gravity Forms néhány passzív védelmet is alkalmaz: a naplófájlok neve minden bekapcsoláskor új, véletlen azonosítót kap, és egy `index.html` fájl megakadályozza a mappa tartalmának listázását. Ez nem pótolja azt, hogy a naplózást kikapcsold, és a napló fájljait ne hagyd hozzáférhető szerveren.

## A naplók törlése

A törléshez a naplózás oldalán a **napló megtekintése** helyett a **napló törlése** hivatkozást használd. Az összes naplófájl akkor is törlődik, ha az **Űrlapok → Beállítások** oldalon kikapcsolod a naplózást, vagy a figyelmeztetésben lévő hivatkozást használod.

## Saját naplóbejegyzések

A beépített naplóbejegyzések nem mindent rögzítenek: például a feltételes logika szabályainak kiértékelését vagy a mezők ellenőrzési hibáit nem. Ezeket a téma `functions.php` fájljába tett kóddal naplóztathatod. A naplózás ilyenkor is csak akkor ír, ha be van kapcsolva.

### A feltételes logika kiértékelése

Ha egy értesítés azért nem megy el, mert a feltételes logika szabálya nem teljesül, a `gform_is_value_match` szűrővel látod, milyen a szabály, és mi volt a mező tényleges értéke.

```php
add_filter( 'gform_is_value_match', 'log_conditional_logic_evaluation', PHP_INT_MAX, 6 );
function log_conditional_logic_evaluation( $is_match, $field_value, $target_value, $operation, $source_field, $rule ) {
	GFCommon::log_debug( 'gform_is_value_match: $rule => ' . print_r( $rule, 1 ) );
	GFCommon::log_debug( 'gform_is_value_match: $field_value => ' . print_r( $field_value, 1 ) );
	GFCommon::log_debug( 'gform_is_value_match: $is_match => ' . var_export( $is_match, 1 ) );

	return $is_match;
}
```

### A mezők ellenőrzési hibái

```php
add_filter( 'gform_validation', 'log_validation_errors', PHP_INT_MAX );
function log_validation_errors( $validation_result ) {
	$form = $validation_result['form'];
	foreach ( $form['fields'] as $field ) {
		if ( $field->failed_validation ) {
			GFCommon::log_error( "form #{$form['id']}: validate() - failed: {$field->label} ({$field->id} - {$field->type}) - message: {$field->validation_message}" );
		}
	}

	return $validation_result;
}
```

### A mentett értékek

A `gform_save_field_value` szűrővel a beküldött és a ténylegesen mentett értéket is naplózhatod.

```php
add_filter( 'gform_save_field_value', 'log_saved_values', PHP_INT_MAX, 5 );
function log_saved_values( $value, $entry, $field, $form, $input_id ) {
	$input_name = 'input_' . str_replace( '.', '_', $input_id );

	GFCommon::log_debug( "log_save_field_value: Input ID: {$input_id}. POST value => " . print_r( rgpost( $input_name ), true ) );
	GFCommon::log_debug( 'log_save_field_value: Saved value => ' . print_r( $value, true ) );

	return $value;
}
```

### Írás a Gravity Forms magjának naplójába

Egyszerű bejegyzés a saját kódodból:

```php
GFCommon::log_debug( __METHOD__ . '(): running.' );
```

Szöveges változóval:

```php
GFCommon::log_debug( __METHOD__ . "(): Nothing to do for the {$event} event." );
```

Tömb vagy objektum kiírása:

```php
GFCommon::log_debug( __METHOD__ . '(): form => ' . print_r( $form, true ) );
```

A `__METHOD__` PHP-állandó: a rendszer az aktuális osztály- és metódusnévre cseréli. Elhagyhatod, és írhatsz helyette függvénynevet vagy más azonosítót.

### Írás egy kiegészítő naplójába

Ha saját kiegészítőt írsz a kiegészítő-keretrendszerrel, a kiegészítő saját naplófájljába így írhatsz:

```php
$this->log_debug( __METHOD__ . '(): feed => ' . print_r( $feed, true ) );
```
