it-swarm-eu.dev

Protokolování: Proč a co?

Nikdy jsem nenapsal programy, které významně využívají protokolování. Nejvíc jsem udělal, když jsem zaznamenal stopy zásobníku, když se vyskytly výjimky.

Zajímalo by mě, kolik se ostatní lidé přihlašují? Záleží na tom, jakou aplikaci píšete? Považujete protokoly za skutečně užitečné?

40
Winston Ewert

Za práci jsem udělal převážně vestavěné aplikace, přihlašování do neocenitelného nástroje. Na minimum chyby musí být zaznamenány s dostatkem informací, které ukazují na řádek kódu. Dále by to byly hlavní funkční body v celé aplikaci. Věci, jako je admin, přistupovaly ke stroji. Používáme systém, který nám umožňuje povolit podrobnější protokolování. To je obvykle specifické pro vývojáře. Může být použit k pomoci vývojáři během testování funkce nebo může pomoci při diagnostice problému zákazníka.

Přihlašování osobně jsem použil ve všech aplikacích, které jsem vyvinul. Vždy to vedlo k lepšímu pochopení toku aplikace. Obzvláště když je v rukou zákazníka. Nikdy (zřídka) omezují své případy použití na ty, proti nimž testujete.

24
Jeff

Nemyslím si, že to záleží na druhu aplikace: protokolování je užitečné v všech (netriviálních) aplikacích. Určitě to může být více užitečné v některých aplikacích než jiné, ale nemyslím si, že je to vždy k ničem.

Zejména v případě chyby vám trasování zásobníku řekne stav programu v okamžiku přesný bod selhání, ale o stavu máte jen velmi malou představu těsně před k chybě. Tyto informace by mohly být velmi užitečné při sledování problému a protokolování může poskytnout užitečný pohled na to. Myslím, že to je něco, z čeho mohou těžit jen ty nejvýznamnější programy.

Další využití protokolování, které nemusí být užitečné pro všechny programy, je statistická analýza. Váš webový server například obvykle zaznamená každý požadavek, který přichází, a pak existuje mnoho nástrojů, které tyto protokoly analyzují a vytvářejí grafy vašich nejrušnějších časů, nejpopulárnějších stránek atd. Tato data můžete použít k plánování kapacity („Potřebuji větší server?“) Atd.

19
Dean Harding

Protokolování je provedeno ze dvou důvodů:

  1. Diagnostický
  2. Audit

Diagnostické protokolování již diskutovali ostatní a já nebudu bod mnohem více zpochybňovat. Řeknu jen, že byste měli silně přemýšlet o tom, co se stane, pokud dojde k selhání protokolu? Záleží vám na tom, abyste pomocí aplikace vyhodili výjimku nebo ji spravovali jiným způsobem? Jedná se o „záleží“, ale zprávy o protokolování informací na úrovni by pravděpodobně měly být přeskočeny.

Protokolování audit je obchodní požadavek. Protokolování auditu zachycuje významné události v systému a je o to, o co se management a právní orli zajímají. To jsou věci jako kdo se odhlásil, kdo udělal, co edituje atd. Jako systémový administrátor nebo vývojář, který řeší systém, jste pravděpodobně jen mírně se o ně zajímají. V mnoha případech je však tento druh protokolování absolutně součástí transakce a měl by selhat celou transakci, pokud ji nelze dokončit.

Přemýšlet o těchto dvou samostatně je pro mě užitečné nejen proto, že jeden je „volitelný“ a druhý povinný, ale protože v závislosti na požadavcích je možná budu muset implementovat samostatně. Může se stát (někdy), že jsou oba plody, ale jedním jsou jablka a ostatní pomeranče. Obvykle však oba protokoly zvládne jediný rámec protokolování.

9
MIA

Ve většině úloh serveru je protokolování rozhodující, protože administrátor obvykle není, když se něco stane, takže musí zkontrolovat následnou skutečnost.

Ale člověk z Googlu mi jednou řekl, že jejich serverové procesy neprovádějí protokolování; místo toho jsou „instrumentováni“; to znamená, že každý proces má háčky nebo porty (nespecifikoval mechaniku), kde mohou ostatní procesy zablokovat a požádat o parametry a statistiku. Jsou to ty monitorovací procesy, které ukládají do protokolů spoustu věcí, výhodou je, že informace, které získají, nejsou „otevřeny soubor“, „napsat toto“, „načíst“; dostanou věci jako "45 453 otevřených souborů", "653 klientů služby X", "průměrná odpověď na dotaz Y 344 ms"

Jistě je to jiný přístup, a ten, který mám tendenci mít na paměti, když hlídám své systémy, i když jsou o několik řádů menší.

8
Javier

Přišel jsem z aplikace winforms N-Tiered, která zaznamenávala všechno.

Nebylo to moc užitečné.

Jistě, výjimky z protokolování jsou skvělé; ale proč je přihlásit do klientského počítače, když můžete zaslat výjimku e-mailem týmu dev?

Zaznamenávání informací se snadno změní v závislost, jejíž hodnota je zřídka zdůvodněna. Pro každou situaci, kdy se můžete přihlásit bezdůvodně, je lepší shromažďovat cílené informace a posílat je tam, kam potřebujete.

4
George Stocker

Získávání informací o výjimkách je nutností, protože může být do určité míry velmi užitečné. Informace o výjimkách však někdy nestačí, zejména pokud uživatel aplikace/klient nemůže nahlásit chybu se správnými informacemi.

Je protokolování omezeno pouze na zaznamenávání chybových informací?

V mém případě (webová aplikace) vždy zaznamenávám, která stránka je navštívena, kdy, co kliknou, kde ip a prohlížeč atd. Dokonce zaznamenávám celkovou dobu načítání pro každou návštěvu stránky, abych mohl vědět, které stránky jsou pomalé a potřebují optimalizaci. takže mohu říci, že se přihlašuji co nejvíce.

zpočátku jsem netušil, jak významné to bude. ale zřejmě je to velmi užitečné v mnoha věcech (kromě ladění):

  • porozumění chování uživatelů
  • vyhodnocení přijetí nové funkce
  • rozlišovat mezi začátečníky, podvodníky nebo potenciálními zákazníky

Domnívám se, že protokolování se může stát ještě důležitějším, pokud v něm milujeme vytěžování statistických informací.

4
Anwar Chandra

Jsem vývojář ve společnosti, jejíž produkty jsou rozmístěny v zámoří. Když podpůrný tým přijde s dotazem na definici problému, moje jediné nástroje pro diagnostiku jsou moje soubory protokolu a kopie zákaznické databáze. Pomocí databáze a mého vývojového prostředí mám příležitost reprodukovat chybný případ, protože příchozí data zaznamenávám do svého modulu a související akce. Pokud dokážu tuto chybu reprodukovat pomocí shromážděných dat, mohu ji opravit pomocí ladění. Kdybych neměl žádné protokolové soubory, musel bych záviset na popisu zákazníka nebo podpůrného týmu, co se v takovém případě děje (což má velkou šanci klamat).

Zadruhé, protokolování mi dává šanci odhalit úzká místa mého modulu na nasazeném místě, protože zaznamenávám datum a čas určitých akcí a poté se mohu podívat, která akce spotřebuje, kolik času.

Kromě toho předpokládejme, že naše řešení se skládá ze 6 modulů a v souborech protokolu vidím protokoly chyb o vypršení časového limitu databáze. Pokud jsou tyto chyby zaznamenány také v 5 ostatních modulech, zvyšuje se pravděpodobnost, že se jedná o problém související se serverem SQL. Pokud je to zaznamenáno pouze v mém modulu, zvyšuje se pravděpodobnost, že moje dotazy jsou buggy. Myslím, že tyto věci jsou užitečné ukazatele.

O tom, jaká data vidím v mých souborech protokolu, záleží na konfiguraci úrovně protokolu. Pokud se jedná o nový produkt, nastavili jsme úroveň protokolu na „Vše“, abychom shromáždili co nejvíce dat. Ale když vylepšíme produkt, můžeme raději ponechat úroveň protokolu na „Chyba“, aby se protokolovala pouze chyba, ale ne protokoly úrovně informací atd. ...

2
aslisabanci

Protokolování je užitečné pro informace, které nelze získat jinými programy:

  • Zachyťte stopy zásobníku (máte tu)
  • Zaznamenejte, jaká data byla zpracovávána při selhání aplikace. Pamatujte, že debuggery pomáhají pouze v případě, že jsou přítomny v okamžiku, kdy dojde k chybě.
  • Profilování informací. Pokud nemůžete spustit profiler v produkčním prostředí, rozsáhlé protokolování včetně časových razítek vám může pomoci zjistit, kam šel čas. I když to nedokážeme říct, může vám pomoci zjistit, že se nachází mimo váš program (např. Kope se do smetí).
  • Statistika se při psaní programu neočekává. Byl jsem požádán, abych poskytl grafy chování v čase v intervalech zajímavých z jiných důvodů. Potřebná data by mohla být extrahována z log souborů pomocí trochu grep + awk + Perl ninja triků.

Poznámka: Chcete alespoň dva protokolové soubory.

  • Jeden na úrovni DEBUG - poskytuje všechny informace, které si můžete představit, jaké kdy budete potřebovat (včetně INFO a výše). Pokud je toho příliš mnoho, pak zvažte další úroveň TRACE.
  • Jeden na úrovni INFO - poskytuje přehled o systému 10000 metrů. Důležité milníky jdou sem.

INFO je vždy zapnutý. DEBUG je zapnutý, když je potřeba.

Napište logovací kód, který předpokládá, že jednoho dne budete muset ladit situaci, kdy VŠECHNY, co máte, je logovací soubor, a správné provedení může být rozdílem mezi vyhozením a povýšením.

U další míle nechte všechna volání funkcí přidat své parametry do libovolného trasování zásobníku, v Java s

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

Tento přístup v zásadě vylepšuje váš zásobník volání o hodnoty parametrů a může vám umožnit analyzovat situaci pouze pomocí trasování zásobníku a nemusíte vidět soubory protokolu.

2
user1249

Protokolování je vždy užitečné. Ale při implementaci mějte na paměti, že to nemusíte nutně vy, kdo si přečte deníky. Možná je to nějaký druh administrátora, koncového uživatele, zákazníka, podpůrného týmu, ...

Nezapisujte tedy pouze protokoly stacktraces, ale také některé další informace, které mohou být interpretovány nevyvinutými vývojáři. Je-li aplikace spravována některými dalšími skupinami, je také užitečné zapsat do protokolů některé jedinečné chybové kódy. To by mohlo usnadnit podporu, automatizaci, ...

Další bod z pohledu administrátora: Přemýšlejte o rotaci protokolu.

1
Christian

Také bych doporučil, aby všechny netriviální aplikace využívaly víceúrovňové protokolování.

Z důvodů, které uvedli ostatní, je to neocenitelný nástroj pro řešení problémů s aplikací.

V některých případech je protokolování nezbytné, například ve finančních aplikacích a dalších doménách, které vyžadují protokoly aktivit, pro zabezpečení, metriky využití a auditování.

1
ocodo

Rozhodně záleží na tom, jaký typ systému vytváříte.

Pokud píšete samostatnou stolní aplikaci, například textový procesor, pravděpodobně nepotřebujete protokolování.

Pokud píšete integrovaný systém, nemůžete žít bez protokolování. V opačném případě, když vložené zařízení zamrzne, nemáte ponětí, proč. Také je třeba protokolovat, kdykoli váš systém zahrnuje více procesů nebo více fyzických strojů, které spolu komunikují. Znovu, když systém visí, musíte vědět, která část systému zemřela kdy a proč. Musíte být schopni porovnat protokoly, abyste zjistili, zda se data přenesla z jednoho procesu do druhého. Stejným tokenem potřebujete protokolovat pokaždé, když je váš systém určen k provozu po delší dobu bez velké přímé uživatelské interakce.

1
Dima