20a45e06cd
SKILL.md odchudzony z 493 do 333 linii: sekcje Serwisy, Tłumaczenia i Log wyciągnięte do nowych referencji, sekcja Session skrócona do fundamentów (szczegóły w session-login.md), dodana Mapa skilla. W examples.md usunięte duplikaty z context.md i datapack-guidedrow.md, dodane spisy treści do dużych referencji. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
# Tłumaczenia i logowanie
|
|
|
|
Soneta dostarcza dwa fundamenty obserwowalności i lokalizacji, które działają razem - tłumaczenia napisów oraz log zmian / śledzenie czasu wykonania.
|
|
|
|
## Tłumaczenie i formatowanie napisów
|
|
|
|
Biblioteka obsługuje słowniki tłumaczące napisy w aplikacji Soneta.
|
|
|
|
- Tłumaczone napisy muszą używać metody string-extender: `"napis do tłumaczenia".Translate()`.
|
|
- Tłumaczenie tekstów formatowanych: `"napis {0} z wartością {1}".TranslateFormat(arg0, arg1)`.
|
|
- Gdy string ma być **zignorowany** przez tłumacza, MUSISZ oznaczyć go metodą `"nie tłumaczymy".TranslateIgnore()` - inaczej błąd kompilacji.
|
|
- Jeśli w metodzie lub klasie jest wiele napisów do zignorowania, użyj atrybutu `[TranslateIgnore]` na metodzie / klasie.
|
|
- Parametr metody ignorowany przez tłumacza - atrybut `[TranslateIgnore]` na parametrze.
|
|
|
|
## Log zmian i obserwowalność
|
|
|
|
Używaj standardowych narzędzi do logowania `ILogger<T>`. Użyj `[TranslateIgnore]` w metodzie wywołującej log (komunikaty logu nie są tłumaczone). Używaj `logger.IsEnabled(LogLevel)` kiedy parametry wymagają dodatkowych operacji.
|
|
|
|
### Użycie `ILogger` oraz exception log
|
|
|
|
```csharp
|
|
class Test
|
|
{
|
|
private readonly ILogger<Test> logger =
|
|
BusApplication.Instance.GetRequiredService<ILogger<Test>>();
|
|
|
|
public decimal Kwota;
|
|
|
|
[TranslateIgnore]
|
|
public void Metoda()
|
|
{
|
|
try
|
|
{
|
|
logger.LogInformation("Wywołanie metody {nazwa}", nameof(Metoda));
|
|
if (Kwota < 0)
|
|
logger.LogWarning("Kwota {kwota} nie może być ujemna w metodzie '{metoda}'", Kwota, nameof(Metoda));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Sposób na wrzucenie exception do trace
|
|
ex.Log<Test>();
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Śledzenie czasu wykonania z obsługą exception
|
|
|
|
```csharp
|
|
class Test
|
|
{
|
|
private static readonly ActSource actSource = new(nameof(Test), ActSource.TraceLevel.Default);
|
|
|
|
public void Action()
|
|
{
|
|
using var activity = actSource.Start();
|
|
|
|
try
|
|
{
|
|
// Algorytm do śledzenia
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
activity.AddExceptionWithError(ex);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
```
|