> For the complete documentation index, see [llms.txt](https://docs.eximee.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/logowanie-w-scriptcode.md).

# Logowanie w ScriptCode

## Dostępne metody logowania

W środowisku ScriptCode dostępny jest obiekt **`Logger`**, który umożliwia logowanie zdarzeń i danych z poziomu skryptu.

{% hint style="info" %}
Wszystkie argumenty przekazane do metod `Logger.<method>()` są domyślnie traktowane jako **dane sensytywne**, czyli potencjalnie zawierające dane wrażliwe, i zostaną ukryte w logach niesensytywnych.
{% endhint %}

Dostępne metody logowania:

```javascript
function callService(context) {
    Logger.info('COMPLETE TASK EXECUTED [arg1={}, arg2={}]', 'arg1', 'arg2');
    Logger.debug('COMPLETE TASK EXECUTED [arg1={}, arg2={}]', 'arg1', 'arg2');
    Logger.warn('COMPLETE TASK EXECUTED [arg1={}, arg2={}]', 'arg1', 'arg2');
    Logger.error('COMPLETE TASK EXECUTED [arg1={}, arg2={}]', 'arg1', 'arg2');
    Logger.trace('COMPLETE TASK EXECUTED [arg1={}, arg2={}]', 'arg1', 'arg2');
}
```

### Wybór poziomu logowania

W ScriptCode używaj przede wszystkim poziomu `INFO`. Najważniejsze błędy i wyjątki są logowane automatycznie przez mechanizmy platformy.

<table data-header-hidden><thead><tr><th width="186.873291015625"></th><th></th></tr></thead><tbody><tr><td>Poziom</td><td>Zasada użycia w ScriptCode</td></tr><tr><td><code>INFO</code></td><td><strong>Domyślny poziom logowania.</strong> Używaj do informacji diagnostycznych i biznesowych potrzebnych do prześledzenia działania skryptu.</td></tr><tr><td><code>WARN</code></td><td><strong>Używaj tylko w uzasadnionych przypadkach.</strong> Przeznaczone dla istotnych i nietypowych sytuacji wymagających analizy.</td></tr><tr><td><code>ERROR</code></td><td><strong>Nie używaj w ScriptCode.</strong> Błędy wymagające logowania na poziomie <code>ERROR</code> są obsługiwane i logowane przez platformę.</td></tr><tr><td><code>DEBUG</code>, <code>TRACE</code></td><td>Używaj do szczegółowej diagnostyki podczas developmentu. Logi te nie są dostępne na środowiskach testowych i produkcyjnych.</td></tr></tbody></table>

<details>

<summary>INFO - domyślny poziom logowania</summary>

Poziomu `INFO` używaj do logowania informacji potrzebnych do analizy przebiegu skryptu, np. wykonania istotnego kroku biznesowego lub podjęcia określonej ścieżki logiki.

```javascript
Logger.info(
    'Application status sent successfully [status={}]',
    nonsensitive(status)
);
```

Możesz korzystać z `Logger.info()`, gdy dodatkowy wpis rzeczywiście ułatwia diagnostykę. Pamiętaj jednak, aby nie duplikować danych logowanych automatycznie przez platformę i nie dodawać nadmiarowych informacji.

</details>

<details>

<summary>WARN - używany tylko w uzasadnionych przypadkach</summary>

Poziom `WARN` stosuj wyłącznie dla istotnych i nietypowych sytuacji, które powinny zostać zauważone i przeanalizowane.

Wpisy `WARN` są widoczne na środowiskach produkcyjnych i podlegają analizie, dlatego nie używaj tego poziomu jako domyślnego sposobu logowania błędów w skrypcie.

Jeżeli sytuacja jest standardowym elementem logiki biznesowej lub wpis służy wyłącznie diagnostyce działania skryptu, użyj `INFO`.

> Jeżeli nie masz pewności, czy sytuacja wymaga użycia `WARN`, użyj `INFO`.

</details>

<details>

<summary>ERROR - nie używaj w ScriptCode</summary>

Wpisy `ERROR` wskazują na poważne błędy działania systemu i mogą powodować sytuację alarmową oraz powiadomienie linii wsparcia na środowisku produkcyjnym.

Błędy wymagające logowania na poziomie `ERROR` są obsługiwane i logowane przez mechanizmy platformy.

</details>

### Wyjątki biznesowe

W ScriptCode wywołuj błędy biznesowe za pomocą mechanizmów platformy: [Błędy biznesowe](/budowanie-aplikacji/interfejs-uzytkownika/formularze/tworzenie-formularza/strony-bledow.md#bledy-biznesowe).

Jeżeli skrypt rzuca wyjątek biznesowy, platforma automatycznie loguje jego wystąpienie na poziomie `WARN`. Nie loguj tego samego zdarzenia dodatkowo za pomocą `Logger.warn()` ani `Logger.error()`.

### Logowanie w blokach try/catch

W blokach `try/catch` używaj przede wszystkim poziomu `INFO`.

Poziomu `WARN` użyj tylko wtedy, gdy przechwycona sytuacja jest na tyle istotna i nietypowa, że wymaga późniejszej analizy.

***

## Domyślnie logowane dane

Platforma **Eximee** automatycznie loguje i traktuje jako **sensytywne** następujące elementy środowiska ScriptCode:

* dane **wejściowe** formularzy (`input`),
* dane **wyjściowe** (`output`),
* treść **żądań** (`request`) wysyłanych do usług zewnętrznych, np. przez REST API,
* treść **odpowiedzi** (`response`) otrzymywanych z tych usług.

Dane te nie są wypisywane w logach niesensytywnych w sposób umożliwiający odczytanie ich rzeczywistej zawartości. Zostają zastąpione znacznikami `_SENSITIVE_DATA_START_ ... _SENSITIVE_DATA_STOP_` lub `#hashed#`, w zależności od typu aplikacji i kontekstu wykonania.

***

## Logowanie sensytywne i niesensytywne

Jeśli chcemy, aby część danych została wypisana w logach niesensytywnych **bez maskowania**, należy użyć metody **`nonsensitive()`**, która oznacza przekazany argument jako niesensytywny.

Przykład:

```javascript
Logger.info(
    'COMPLETE TASK EXECUTED [arg1={}, arg2={}]',
    nonsensitive('arg1 nonsensitive test'),
    'arg2'
);
```

W tym przykładzie:

* `arg1` zostanie zapisany w logu w formie jawnej,
* `arg2` zostanie ukryty (zastąpiony przez znacznik danych sensytywnych).

> Używaj `nonsensitive()` tylko wtedy, gdy masz pewność, że przekazana wartość nie zawiera danych wrażliwych. Jeżeli masz wątpliwości, pozostaw wartość jako sensytywną.

***

## Format logów

Poniżej przedstawiono przykłady formatów logów dla różnych aplikacji platformy Eximee.

#### Aplikacja `process-handlers`

```
2023-07-20 11:52:07.130 CEST [pb=csadas21312das][pi=149e3ba0-26e3-11ee-8889-927e393a9856][pd=script_code_handler_test_process][sn=process-handler-complete-task][pt=eximeeScriptCodeTask][sci=a919bbb6-1dea-4044-a5ca-ee5f2f0c55ad][TopicSubscriptionManager] INFO  c.c.r.e.l.JavascriptLibraryLoader - Loading javascript libraries from directory=_SENSITIVE_DATA_START_._SENSITIVE_DATA_STOP_

2023-07-20 11:52:07.162 CEST [pb=csadas21312das][pi=149e3ba0-26e3-11ee-8889-927e393a9856][pd=script_code_handler_test_process][sn=process-handler-complete-task][pt=eximeeScriptCodeTask][sci=a919bbb6-1dea-4044-a5ca-ee5f2f0c55ad][TopicSubscriptionManager] INFO  c.c.e.s.logging.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=arg1 nonsensitive test, arg2=_SENSITIVE_DATA_START_arg2_SENSITIVE_DATA_STOP_]

2023-07-20 11:52:07.163 CEST [pb=csadas21312das][pi=149e3ba0-26e3-11ee-8889-927e393a9856][pd=script_code_handler_test_process][sn=process-handler-complete-task][pt=eximeeScriptCodeTask][sci=a919bbb6-1dea-4044-a5ca-ee5f2f0c55ad][TopicSubscriptionManager] WARN  c.c.e.s.logging.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=_SENSITIVE_DATA_START_arg1_SENSITIVE_DATA_STOP_, arg2=_SENSITIVE_DATA_START_arg2_SENSITIVE_DATA_STOP_]

2023-07-20 11:52:07.163 CEST [pb=csadas21312das][pi=149e3ba0-26e3-11ee-8889-927e393a9856][pd=script_code_handler_test_process][sn=process-handler-complete-task][pt=eximeeScriptCodeTask][sci=a919bbb6-1dea-4044-a5ca-ee5f2f0c55ad][TopicSubscriptionManager] ERROR c.c.e.s.logging.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=_SENSITIVE_DATA_START_arg1_SENSITIVE_DATA_STOP_, arg2=_SENSITIVE_DATA_START_arg2_SENSITIVE_DATA_STOP_]
```

***

#### Aplikacja `webforms`

```
2023-07-20 16:15:27,489 CEST [MK_1611202307201615273] [] [http-nio-8082-exec-36] INFO  c.c.e.s.l.l.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=arg1 nonsensitive test, arg2=#hashed#]

2023-07-20 16:15:27,490 CEST [MK_1611202307201615273] [] [http-nio-8082-exec-36] WARN  c.c.e.s.l.l.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=#hashed#, arg2=#hashed#]

2023-07-20 16:15:27,490 CEST [MK_1611202307201615273] [] [http-nio-8082-exec-36] ERROR c.c.e.s.l.l.JavaScriptLoggerImpl - COMPLETE TASK EXECUTED [arg1=#hashed#, arg2=#hashed#]
```

***

## Dobre praktyki

* Do logowania w ScriptCode używaj wyłącznie obiektu `Logger`.
* Domyślnie używaj poziomu `INFO`.
* Poziomu `WARN` używaj bardzo rzadko i tylko dla istotnych, nietypowych sytuacji wymagających analizy.
* Nie używaj `Logger.error()` - błędy na poziomie `ERROR` loguje platforma.
* Nie loguj ponownie danych wejściowych, wyjściowych, requestów ani response'ów, jeżeli platforma już je loguje.
* Nie loguj ponownie wyjątków biznesowych.
* Używaj `nonsensitive()` tylko dla danych, co do których masz pewność, że nie są wrażliwe.
* Unikaj logowania całych obiektów, dużych struktur danych i informacji, które nie są potrzebne do diagnostyki.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/logowanie-w-scriptcode.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
