Erlang 21 - 2. SASL Error Logging

2 एसएएसएल त्रुटि लॉगिंग




erlang

2 एसएएसएल त्रुटि लॉगिंग

ध्यान दें

SASL त्रुटि लॉगिंग अवधारणा इस खंड में वर्णित Erlang / OTP 21.0 के बाद से पदावनत है, जब नया logging API पेश किया गया था।

नया डिफ़ॉल्ट व्यवहार यह है कि एसएएसएल एप्लिकेशन अब लॉग होने वाली घटनाओं को प्रभावित नहीं करता है। Supervisor reports और crash reports डिफ़ॉल्ट लकड़हारा हैंडलर के माध्यम से लॉग इन होती है जो कर्नेल द्वारा सेटअप की जाती है। Progress reports डिफ़ॉल्ट रूप से लॉग इन नहीं है, लेकिन info लिए प्राथमिक लॉग स्तर सेट करके सक्षम किया जा सकता है, उदाहरण के लिए कर्नेल कॉन्फ़िगरेशन पैरामीटर logger_level का उपयोग करके।

पुराने SASL त्रुटि लॉगिंग व्यवहार को कर्नेल कॉन्फ़िगरेशन पैरामीटर logger_sasl_compatible को true करने के लिए पुन: सक्षम किया जा सकता true

इस खंड में वर्णित multi-file error report logging लिए तंत्र को पीछे की संगतता के लिए भी रखा गया है। हालाँकि, नया लॉगिंग API भी logger_disk_log_h(3) परिचय logger_disk_log_h(3) , जो कि एक लकड़हारा हैंडलर है जो disk_log(3) का उपयोग करके कई फ़ाइलों को प्रिंट कर सकता है।

2.1 एसएएसएल की रिपोर्ट

SASL एप्लिकेशन तीन प्रकार की रिपोर्ट पेश करता है:

  • पर्यवेक्षक की रिपोर्ट
  • प्रगति रिपोर्ट
  • क्रैश रिपोर्ट

एसएएसएल आवेदन शुरू होने पर, यह एक लकड़हारा हैंडलर जोड़ता है जो एसएएसएल के configuration parameters for SASL में निर्दिष्ट इन रिपोर्टों को प्रारूपित और लिखता है।

पर्यवेक्षक की रिपोर्ट

पर्यवेक्षक रिपोर्ट तब जारी की जाती है जब एक पर्यवेक्षित बच्चा अप्रत्याशित रूप से समाप्त हो जाता है। एक पर्यवेक्षक रिपोर्ट में निम्नलिखित आइटम शामिल हैं:

Supervisor

रिपोर्टिंग पर्यवेक्षक का नाम।

Context

इंगित करता है कि किस चरण में पर्यवेक्षक के दृष्टिकोण से बच्चे को समाप्त कर दिया गया है। यह start_error , child_terminated , या shutdown_error

Reason

समाप्ति का कारण।

Offender

बच्चे के लिए विनिर्देश शुरू करें।

प्रगति रिपोर्ट

जब एक पर्यवेक्षक एक बच्चे को शुरू या पुनरारंभ करता है, तो एक प्रगति रिपोर्ट जारी की जाती है। एक प्रगति रिपोर्ट में निम्नलिखित आइटम शामिल हैं:

Supervisor

रिपोर्टिंग पर्यवेक्षक का नाम।

Started

सफलतापूर्वक शुरू किए गए बच्चे के लिए स्टार्ट स्पेसिफिकेशन।

क्रैश रिपोर्ट

फ़ंक्शंस के साथ शुरू की गई प्रक्रिया proc_lib:spawn या proc_lib:spawn_link एक catch भीतर लपेटी जाती है। दुर्घटना की रिपोर्ट तब जारी की जाती है जब ऐसी प्रक्रिया किसी अनपेक्षित कारण से समाप्त हो जाती है, जो कि normal , shutdown या {shutdown,Term} अलावा कोई अन्य कारण है। व्यवहारों का उपयोग करने वाली प्रक्रियाएं gen_server , gen_fsm या gen_statem ऐसी प्रक्रियाओं के उदाहरण हैं। क्रैश रिपोर्ट में निम्नलिखित आइटम शामिल हैं:

Crasher

क्रैश प्रक्रिया के बारे में जानकारी, जैसे प्रारंभिक फ़ंक्शन कॉल, निकास कारण और संदेश कतार।

Neighbours

प्रक्रियाओं के बारे में जानकारी जो दुर्घटनाग्रस्त प्रक्रिया से जुड़ी हुई हैं और जाल से बाहर नहीं निकलती हैं। ये प्रक्रियाएं पड़ोसी हैं जो इस प्रक्रिया के दुर्घटनाग्रस्त होने के कारण समाप्त होती हैं। इकट्ठा की गई जानकारी पिछले आइटम में वर्णित क्रैशर के लिए सूचना के समान है।

उदाहरण

निम्न उदाहरण एक प्रक्रिया के क्रैश होने पर उत्पन्न रिपोर्ट दिखाता है। उदाहरण प्रक्रिया test_sup पर्यवेक्षक द्वारा पर्यवेक्षित एक permanent प्रक्रिया है। शून्य द्वारा एक विभाजन को निष्पादित किया जाता है और त्रुटि को सबसे पहले दोषपूर्ण प्रक्रिया द्वारा रिपोर्ट किया जाता है। क्रैश रिपोर्ट जनरेट होती है, क्योंकि फंक्शन proc_lib:spawn/3 का उपयोग करके प्रक्रिया शुरू की गई थी। पर्यवेक्षक दुर्घटनाग्रस्त प्रक्रिया दिखाते हुए एक पर्यवेक्षक रिपोर्ट तैयार करता है। प्रक्रिया के फिर से शुरू होने पर एक प्रगति रिपोर्ट उत्पन्न होती है।

=ERROR REPORT==== 27-May-1996::13:38:56 ===
<0.63.0>: Divide by zero !

=CRASH REPORT==== 27-May-1996::13:38:56 ===
crasher:
pid: <0.63.0>
registered_name: []
error_info: {badarith,{test,s,[]}}
initial_call: {test,s,[]}
ancestors: [test_sup,<0.46.0>]
messages: []
links: [<0.47.0>]
dictionary: []
trap_exit: false
status: running
heap_size: 128
stack_size: 128
reductions: 348
neighbours:

=SUPERVISOR REPORT==== 27-May-1996::13:38:56 ===
Supervisor: {local,test_sup}
Context:    child_terminated
Reason:     {badarith,{test,s,[]}}
Offender:   [{pid,<0.63.0>},
{name,test},
{mfa,{test,t,[]}},
{restart_type,permanent},
{shutdown,200},
{child_type,worker}]

=PROGRESS REPORT==== 27-May-1996::13:38:56 ===
Supervisor: {local,test_sup}
Started:  [{pid,<0.64.0>},
{name,test},
{mfa,{test,t,[]}},
{restart_type,permanent},
{shutdown,200},
{child_type,worker}]

2.2 बहु-फ़ाइल त्रुटि रिपोर्ट लॉगिंग

बहु-फ़ाइल त्रुटि रिपोर्ट लॉगिंग का उपयोग error_logger द्वारा प्राप्त त्रुटि संदेशों को संग्रहीत करने के लिए किया जाता है। त्रुटि संदेश कई फ़ाइलों में संग्रहीत हैं और प्रत्येक फ़ाइल निर्दिष्ट किलोबाइट्स की तुलना में छोटी है। एक ही समय में फ़ाइलों की एक निर्दिष्ट संख्या से अधिक मौजूद नहीं है। लॉगिंग बहुत तेज है, क्योंकि प्रत्येक त्रुटि संदेश बाइनरी शब्द के रूप में लिखा गया है।

अधिक जानकारी के लिए, संदर्भ मैनुअल में sasl(6) एप्लिकेशन देखें।

2.3 रिपोर्ट ब्राउज़र

रिपोर्ट ब्राउज़र ब्राउजर और log_mf_h परिभाषित त्रुटि लकड़हारा हैंडलर log_mf_h द्वारा लिखी गई त्रुटि रिपोर्ट को ब्राउज़ करने के लिए उपयोग किया जाता है।

log_mf_h हैंडलर रिपोर्ट लॉगिंग निर्देशिका में सभी रिपोर्ट लिखता है, जो एसएएसएल एप्लिकेशन को कॉन्फ़िगर करते समय निर्दिष्ट होती है।

यदि रिपोर्ट ब्राउज़र ऑफ़लाइन उपयोग किया जाता है, तो रिपोर्ट को ब्राउज़र शुरू करते समय निर्दिष्ट किसी अन्य निर्देशिका में कॉपी किया जा सकता है। यदि ऐसी कोई निर्देशिका निर्दिष्ट नहीं की जाती है, तो ब्राउज़र SASL error_logger_mf_dir से रिपोर्ट पढ़ता है।

रिपोर्ट ब्राउज़र प्रारंभ करना

फ़ंक्शन rb:start([Options]) साथ rb_server शुरू करें rb:start([Options]) जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:

5> rb:start([{max, 20}]).
rb: reading report...done.
rb: reading report...done.
rb: reading report...done.
rb: reading report...done.
{ok,<0.199.0>}

ऑनलाइन सहायता

कमांड rb:help() दर्ज करें rb:help() रिपोर्ट ब्राउज़र ऑनलाइन सहायता प्रणाली का उपयोग करने के लिए।

सर्वर में सूची रिपोर्ट

फ़ंक्शन rb:list() उपयोग करें rb:list() सभी भरी हुई रिपोर्ट को सूचीबद्ध करने के लिए:

4> rb:list().
No                Type          Process       Date     Time
==                ====          =======       ====     ====
20            progress         <0.17.0> 1996-10-16 16:14:54
19            progress         <0.14.0> 1996-10-16 16:14:55
18               error         <0.15.0> 1996-10-16 16:15:02
17            progress         <0.14.0> 1996-10-16 16:15:06
16            progress         <0.38.0> 1996-10-16 16:15:12
15            progress         <0.17.0> 1996-10-16 16:16:14
14            progress         <0.17.0> 1996-10-16 16:16:14
13            progress         <0.17.0> 1996-10-16 16:16:14
12            progress         <0.14.0> 1996-10-16 16:16:14
11               error         <0.17.0> 1996-10-16 16:16:21
10               error         <0.17.0> 1996-10-16 16:16:21
9        crash_report  release_handler 1996-10-16 16:16:21
8   supervisor_report         <0.17.0> 1996-10-16 16:16:21
7            progress         <0.17.0> 1996-10-16 16:16:21
6            progress         <0.17.0> 1996-10-16 16:16:36
5            progress         <0.17.0> 1996-10-16 16:16:36
4            progress         <0.17.0> 1996-10-16 16:16:36
3            progress         <0.14.0> 1996-10-16 16:16:36
2               error         <0.15.0> 1996-10-16 16:17:04
1            progress         <0.14.0> 1996-10-16 16:17:09
ok

रिपोर्ट दिखाएं

एक विशेष रिपोर्ट का विवरण दिखाने के लिए फ़ंक्शन rb:show(Number) का उपयोग करें:

7> rb:show(4).
        
PROGRESS REPORT  <0.20.0>                                   1996-10-16 16:16:36
===============================================================================
supervisor                                                     {local,sasl_sup}
started
[{pid,<0.24.0>},
{name,release_handler},
{mfa,{release_handler,start_link,[]}},
{restart_type,permanent},
{shutdown,2000},
{child_type,worker}]
        
ok
8> rb:show(9).
        
CRASH REPORT  <0.24.0>                                      1996-10-16 16:16:21
===============================================================================
Crashing process                                                               
pid                                                                 <0.24.0>
registered_name                                              release_handler
error_info                             {undef,{release_handler,mbj_func,[]}}
initial_call
{gen,init_it,
[gen_server,
<0.20.0>,
<0.20.0>,
{erlang,register},
release_handler,
release_handler,
[],
[]]}
ancestors                                                [sasl_sup,<0.18.0>]
messages                                                                  []
links                                                    [<0.23.0>,<0.20.0>]
dictionary                                                                []
trap_exit                                                              false
status                                                               running
heap_size                                                                610
stack_size                                                               142
reductions                                                                54

ok

खोज रिपोर्ट

एक सामान्य पैटर्न वाली सभी रिपोर्ट दिखाई जा सकती हैं। मान लीजिए कि एक प्रक्रिया क्रैश हो गई है क्योंकि यह एक गैर-मौजूदा फ़ंक्शन release_handler:mbj_func/1 को कॉल करने का प्रयास करती है। रिपोर्ट इस प्रकार दिखाई जा सकती हैं:

12> rb:grep("mbj_func").
Found match in report number 11
        
ERROR REPORT  <0.24.0>                                      1996-10-16 16:16:21
===============================================================================
        
** undefined function: release_handler:mbj_func[] **
Found match in report number 10

ERROR REPORT  <0.24.0>                                      1996-10-16 16:16:21
===============================================================================
        
** Generic server release_handler terminating 
** Last message in was {unpack_release,hej}
** When Server state == {state,[],
"/home/dup/otp2/otp_beam_sunos5_p1g_7",
[{release,
"OTP  APN 181 01",
"P1G",
undefined,
[],
permanent}],
undefined}
** Reason for termination == 
** {undef,{release_handler,mbj_func,[]}}
Found match in report number 9
        
CRASH REPORT  <0.24.0>                                      1996-10-16 16:16:21
===============================================================================
Crashing process                                                               
pid                                                                 <0.24.0>
registered_name                                              release_handler
error_info                             {undef,{release_handler,mbj_func,[]}}
initial_call
{gen,init_it,
[gen_server,
<0.20.0>,
<0.20.0>,
{erlang,register},
release_handler,
release_handler,
[],
[]]}
ancestors                                                [sasl_sup,<0.18.0>]
messages                                                                  []
links                                                    [<0.23.0>,<0.20.0>]
dictionary                                                                []
trap_exit                                                              false
status                                                               running
heap_size                                                                610
stack_size                                                               142
reductions                                                                54
        
Found match in report number 8
        
SUPERVISOR REPORT  <0.20.0>                                 1996-10-16 16:16:21
===============================================================================
Reporting supervisor                                           {local,sasl_sup}
        
Child process                                                                  
errorContext                                                child_terminated
reason                                 {undef,{release_handler,mbj_func,[]}}
pid                                                                 <0.24.0>
name                                                         release_handler
start_function                               {release_handler,start_link,[]}
restart_type                                                       permanent
shutdown                                                                2000
child_type                                                            worker
        
ok

सर्वर बंद करो

rb_server को रोकने के लिए फ़ंक्शन rb:stop() का उपयोग करें:

13> rb:stop().
ok