4.1 Listahan ng mga antas ng pag-log
Isinulat mo ang iyong programa, na-upload ito sa server, at pagkatapos ay nagsimula kang magkaroon ng mga katanungan:
- Paano masisiguro na
debug()
ang pamamaraan ay hindi gumagana habang nagtatrabaho saproduction
? - Napakaraming impormasyon sa mga log, gusto mo bang mag-iwan lamang ng mga mensahe ng error?
- Paano makita ang isang detalyadong log para sa isang bahagi ng application?
Siyempre, ang mga tagalikha ng mga log ay nahaharap sa parehong bagay ilang dekada na ang nakalipas. Hindi ko sasabihin sa iyo kung paano nalutas ang problemang ito sa wikang C, ngunit sa wikang Java ay nalutas ito nang napakaganda.
Sinasala ng log ang data bago isulat ang impormasyon sa . Maaari mong napakabilis na bawasan / taasan ang detalye ng log sa pamamagitan ng pagtatakda ng antas ng pag-log. Ang mga antas na ito ay inilarawan sa talahanayan sa ibaba:
Antas | Tandaan | |
---|---|---|
1 | LAHAT | I-log ang lahat ng mensahe |
2 | TRACE | Maliit na mensahe kapag nagde-debug |
3 | DEBUG | Mga mensaheng mahalaga para sa pag-debug |
4 | IMPORMASYON | Mga simpleng mensahe |
5 | BALAAN | Sumulat lamang ng nakamamatay, pagkakamali at babala |
6 | ERROR | Isulat lamang ang mga pagkakamali at nakamamatay na mga pagkakamali |
7 | FATAL | Sumulat lamang ng mga nakamamatay na pagkakamali |
8 | NAKA-OFF | Huwag magsulat ng mga mensahe sa log |
Ang mga antas na ito ay ginagamit kapag nag-filter ng mga mensahe. Kung itinakda mo ang antas ng pag-log sa WARN
, ang lahat ng mensaheng hindi gaanong mahalaga kaysa WARN
ay itatapon: TRACE
, DEBUG
, INFO
. Kung itinakda mo ang antas ng pag-filter sa FATAL
, pagkatapos ay kahit na ERROR
.
May dalawa pang antas ng kalubhaan na ginagamit sa pag-filter - ito OFF
(i-discard ang lahat ng mensahe) at ALL
- isulat ang lahat ng mensahe (i-discard ang wala).
4.2 Halimbawa ng setup ng log
Tingnan natin ang isang simpleng halimbawa ng pag-setup ng log. Para magawa ito, kailangan namin ang log4j.properties file, na maaaring ilagay sa resources folder. Idagdag natin ang sumusunod na nilalaman dito:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Dito sa pinakaunang linya ay itinakda namin ang antas ng pag-log - WARN
. At nangangahulugan ito na ang mga mensaheng isinulat sa logger na may status DEBUG
ay INFO
hindi papansinin.
- Tukuyin kung anong uri ng appender ang gagamitin namin -
ConsoleAppender
- Tukuyin kung saan namin isusulat ang log -
System.out
- Itinakda namin ang klase na kumokontrol sa format ng pag-record -
PatternLayout
- Itakda ang format ng pag-record para sa lahat ng mga mensahe - petsa at oras
4.3 Mga sikat na pagkakamali sa pag-log
At isa pang mahalagang punto - mga tanyag na error sa pag-log. Walang napakaraming mga pagpipilian upang gawin ang isang bagay, ngunit maaaring makilala ang ilang karaniwang pagkakamali:
- Masyadong maraming pag-log . Hindi mo dapat i-log ang bawat hakbang, na sa teorya ay maaaring maging mahalaga. Mayroong panuntunan: maaaring i-load ng mga log ang pagganap nang hindi hihigit sa 10% . Kung hindi, magkakaroon ng mga isyu sa pagganap.
- Pagla-log sa lahat ng data sa isang file . Ito ay magiging sanhi upang maging napakahirap basahin/sulatan sa isang punto, hindi banggitin na may mga limitasyon sa laki ng file sa ilang mga system.
- Paggamit ng mga maling antas ng pag-log . Ang bawat antas ng pag-log ay may malinaw na mga hangganan, at dapat silang igalang. Kung malabo ang hangganan, maaari kang sumang-ayon sa kung aling antas ang gagamitin.