# 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.\
Domyślnie wszystkie argumenty przekazane do metod `Logger.<method>()` są traktowane jako **sensytywne**, czyli potencjalnie zawierające dane wrażliwe.

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');
}
```

> Wszystkie argumenty powyższych metod są automatycznie traktowane jako **dane sensytywne** i w logach niesensytywnych zostaną ukryte.

## Domyślnie logowane dane

Platforma **Eximee** domyślnie loguję oraz 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.

Oznacza to, że nawet jeśli nie zostaną one jawnie oznaczone jako sensytywne w kodzie, nie będą wypisywane w logach niesensytywnych w sposób umożliwiający odczytanie rzeczywistej zawartości.\
Zostaną zastąpione znacznikami `_SENSITIVE_DATA_START_ ... _SENSITIVE_DATA_STOP_` lub `#hashed#`, w zależności od typu aplikacji i kontekstu wykonania<br>

## 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).

***

## 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

* Używaj `nonsensitive()` **tylko** wtedy, gdy masz pewność, że dane nie zawierają informacji wrażliwych.
* Stosuj odpowiedni **poziom logowania**:
  * `trace` i `debug` – do analizy szczegółów działania skryptu,
  * `info` – dla komunikatów o przebiegu procesu,
  * `warn` – dla sytuacji nietypowych, ale niekrytycznych,
  * `error` – dla błędów wymagających interwencji.
* Unikaj logowania całych obiektów lub dużych struktur danych.


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
