== Röviden ==
Logolásra a django beépített log rendszerét használjuk. Következőkben megpróbálom röviden összefoglalni, mit, miért úgy valósítottam meg, ahogy, s hogy hogyan lehet használni a log keretrendszert.
A log keretrendszer a következő elemeket biztosítja számunkra: log hívások, loggerek, handlerek, filterek s formatterek. Ezek közül az első az, amit a kódban elhelyezve az üzenetet ír a logba, ha meghívódik. Utóbbiak pedig ezen üzenetek feldolgozását leíró szabályok. Az alábbiakban ezekről kívánok röviden írni. A django logolási lehetőségeiről bővebben: https://docs.djangoproject.com/en/1.5/topics/logging/
Log hívások
Az alábbi log hívásokat különböztetjük meg, prioritás szerint a legerősebbtől a leggyengébb felé:
- logger.critical()
- logger.error()
- logger.warning()
- logger.info()
- logger.debug()
A kódban a log hívások előtt szerepelnie kell(ene) a következő két sornak:
.. TODO: Indent lines, set language: Example .. code-block:: python import logging logger = logging.getLogger(name)
A logging.getLogger paramétere string, amely nevet a loggernek szánjuk. Amennyiben itt meghagyjuk a {{{name }}} változót, a logger neve a django app nevével lesz azonos. Ez lehetőséget ad arra, hogy egy django appon belül két loggerünk legyen, s az azokon keresztül indított log hívásokat másképp dolgozzuk fel.
.. TODO: Indent lines, set language: Example .. code-block:: python import logging
loggerevision 1 <changeset/1>
_ = logging.getLogger('app_log1')
loggerevision 2 <changeset/2>
_ = logging.getLogger('app_log2')
loggerevision 1 <changeset/1>
.debug('Ez most a log1-en keresztül')
loggerevision 2 <changeset/2>
.debug('ez pedig a log2-n keresztül megy')
Log beállítások
Egy kicsit kipuculva lejjebb látható egy példa log beállítás, alatta rövid magyarázat.
.. TODO: Indent lines, set language: Example .. code-block:: python LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters':{ 'simple': { 'format': '%(asctime)s [%(levelname)s]: %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S', }, }, 'filters': { }, 'handlers': { 'syslog': { 'level': 'DEBUG', 'class': 'logging.handlers.SysLogHandler', 'formatter': 'simple', 'address': LOGSERVER, # LOGSERVER = ("logs.papertrailapp.com", 14526) }, 'logfile': { 'level':'INFO', 'class':'logging.handlers.RotatingFileHandler', 'filename':'/opt/webadmin/cloud/logfile.log', 'maxBytes': 1024, 'backupCount': 5, 'formatter': 'simple' },
},
'loggers': {
'one':{
'handlers': ['syslog'],
'level': 'DEBUG',
},
}
}
Szóval:
- Megmondja, hogy a beállítást a ’dictConfig version 1’ formátumban írták. (Jelenleg más verzió nincs, kompatibilitási okokból szerepel)
- Az összes eddigi log beállítást letiltja.
-
Nos, itt következik a formatterek leírása
- Melyből jelen példában egy van, s ’simple’ névre hallgat. A ’format’ sorban leírom az üzenet megjelenését a logban (jelen példában: aktuális_idő
szintje <log>
_: üzenet), alatta pedig az idő megjelenését.
- Melyből jelen példában egy van, s ’simple’ névre hallgat. A ’format’ sorban leírom az üzenet megjelenését a logban (jelen példában: aktuális_idő
https://docs.djangoproject.com/en/dev/releases/1.4/#request-exceptions-are-now-always-logged
-
S definiálok két handlert:
Végül, de nem utolsó sorban, pedig a loggerek. Ebből csak egy áll fent példának, mégpedig:[
BR <BR>
_]Ami a one nevű loggerel hívott log üzeneteket a syslog handler felé továbbítja, amennyiben az eléri a DEBUG szintet. Amennyiben több handler felé szeretnénk továbbítani egy-egy üzenetet, akkor a szögletes zárójelen belül, vesszővel elválasztva kell felsorolni a handlereket.
Megjegyzés
https://papertrailapp.com/ - csak hogy ne felejtődjön el, online log management