$lang['tuto'] = "ਟਿ utorial ਟੋਰਿਅਲਸ"; ?> ਗਲਤੀਆਂ ਦੇ ਦੌਰਾਨ ਹਾਲੀਆ

ਗਲਤੀਆਂ ਦੇ ਦੌਰਾਨ ਹਾਲੀਆ ਪਾਈਥਨ ਲੌਗਿੰਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਹੈ

Temp mail SuperHeros
ਗਲਤੀਆਂ ਦੇ ਦੌਰਾਨ ਹਾਲੀਆ ਪਾਈਥਨ ਲੌਗਿੰਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਹੈ
ਗਲਤੀਆਂ ਦੇ ਦੌਰਾਨ ਹਾਲੀਆ ਪਾਈਥਨ ਲੌਗਿੰਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਹੈ

ਗਲਤੀ ਦੇ ਪ੍ਰਬੰਧਨ ਲਈ ਪਾਈਥਨ ਲੌਗਿੰਗ ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨਾ

ਪ੍ਰੋਗਰਾਮ ਦੇ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਦੌਰਾਨ ਘਟਨਾਵਾਂ ਨੂੰ ਟਰੈਕ ਕਰਨ ਅਤੇ ਸਮੱਸਿਆਵਾਂ ਦਾ ਨਿਦਾਨ ਕਰਨ ਲਈ ਪਾਈਥਨ ਵਿੱਚ ਲੌਗਇਨ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ। ਹਾਲਾਂਕਿ, ਕੁਝ ਮੋਡੀਊਲ ਬਹੁਤ ਜ਼ਿਆਦਾ ਟਰੇਸ ਜਾਣਕਾਰੀ ਪੈਦਾ ਕਰ ਸਕਦੇ ਹਨ, ਜੋ ਕਿ ਲੌਗਸ ਨੂੰ ਕਲਟਰ ਕਰ ਸਕਦਾ ਹੈ। ਅਜਿਹੇ ਮਾਮਲਿਆਂ ਵਿੱਚ, ਇੱਕ ਉਚਿਤ ਲੌਗਿੰਗ ਪੱਧਰ ਨਿਰਧਾਰਤ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਗਲਤੀ, ਬੇਲੋੜੇ ਵੇਰਵਿਆਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।

ਅਜਿਹੇ ਹਾਲਾਤਾਂ ਵਿੱਚ ਜਿੱਥੇ ਇੱਕ ਮੋਡੀਊਲ ਬਹੁਤ ਜ਼ਿਆਦਾ ਲੌਗ ਤਿਆਰ ਕਰਦਾ ਹੈ, ਪਰ ਇਸਨੂੰ ਕਾਲ ਕਰਨ ਵਾਲੇ ਦੂਜੇ ਮੋਡੀਊਲ ਵਿੱਚ ਗਲਤੀਆਂ ਹੁੰਦੀਆਂ ਹਨ, ਹਾਲੀਆ ਲੌਗ ਸੁਨੇਹਿਆਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਬਣ ਜਾਂਦਾ ਹੈ। ਇਹ ਅਕਸਰ ਅਜਿਹਾ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਕਿਸੇ ਗਲਤੀ ਦੇ ਮੂਲ ਕਾਰਨ ਦਾ ਪਤਾ ਲਗਾਇਆ ਜਾਂਦਾ ਹੈ। ਬਹੁਤ ਜ਼ਿਆਦਾ ਲੌਗਾਂ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਨ ਅਤੇ ਮਹੱਤਵਪੂਰਨ ਲੋਕਾਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਵਿਚਕਾਰ ਸੰਤੁਲਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਰਗੀਆਂ spdlog C++ ਵਿੱਚ ਇੱਕ ਰਿੰਗ ਬਫਰ ਰਾਹੀਂ ਬੈਕਟ੍ਰੈਕਿੰਗ ਲਈ ਬਿਲਟ-ਇਨ ਸਮਰਥਨ ਹੈ, ਜਿਸ ਨਾਲ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਇੱਕ ਤਰੁੱਟੀ ਵੱਲ ਲੈ ਜਾਣ ਵਾਲੇ ਹਾਲੀਆ ਲੌਗਸ ਦੀ ਸਮੀਖਿਆ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮਿਲਦੀ ਹੈ। ਪਾਈਥਨ ਦਾ ਲਾਗਿੰਗ ਲਾਇਬ੍ਰੇਰੀ, ਹਾਲਾਂਕਿ, ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਬਾਕਸ ਤੋਂ ਬਾਹਰ ਦੀ ਪੇਸ਼ਕਸ਼ ਨਹੀਂ ਕਰਦੀ, ਇਸ ਸਵਾਲ ਨੂੰ ਉਠਾਉਂਦੀ ਹੈ ਕਿ ਇੱਕ ਸਮਾਨ ਵਿਧੀ ਨੂੰ ਕਿਵੇਂ ਲਾਗੂ ਕਰਨਾ ਹੈ।

ਇਹ ਲੇਖ ਖੋਜ ਕਰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਹਾਲੀਆ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਲਈ ਪਾਇਥਨ ਦੇ ਲੌਗਿੰਗ ਸਿਸਟਮ ਨੂੰ ਕਿਵੇਂ ਅਨੁਕੂਲ ਬਣਾ ਸਕਦੇ ਹੋ, ਜਦੋਂ ਕੋਈ ਗਲਤੀ ਆਉਂਦੀ ਹੈ, ਇਸ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਚੈਕਰ ਮੋਡੀਊਲ ਟਰੇਸ ਡੇਟਾ ਦੇ ਨਾਲ ਲੌਗਸ ਨੂੰ ਹਾਵੀ ਕੀਤੇ ਬਿਨਾਂ ਨਿਦਾਨ ਲਈ ਉਪਲਬਧ ਹੈ।

ਹੁਕਮ ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ
deque(maxlen=capacity) ਤੋਂ ਇੱਕ ਡਬਲ-ਐਂਡ ਕਤਾਰ ਸੰਗ੍ਰਹਿ ਮੋਡੀਊਲ, ਇੱਥੇ ਇੱਕ ਰਿੰਗ ਬਫਰ ਬਣਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਲਾਗ ਸੁਨੇਹਿਆਂ ਦੀ ਇੱਕ ਨਿਸ਼ਚਿਤ ਗਿਣਤੀ ਹੁੰਦੀ ਹੈ, ਜਦੋਂ ਨਵੇਂ ਸੁਨੇਹੇ ਆਉਂਦੇ ਹਨ ਤਾਂ ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਨੂੰ ਰੱਦ ਕਰਦੇ ਹਨ। ਹਾਲੀਆ ਸੁਨੇਹਿਆਂ ਦੇ ਲਾਗ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਬਣਾਈ ਰੱਖਣ ਲਈ ਇਹ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਢਾਂਚਾ ਹੈ।
emit(self, record) ਕਸਟਮ ਲੌਗਿੰਗ ਹੈਂਡਲਰਾਂ ਵਿੱਚ ਇੱਕ ਢੰਗ ਓਵਰਰਾਈਡ ਕੀਤਾ ਗਿਆ ਹੈ ਤਾਂ ਜੋ ਹਰੇਕ ਲੌਗ ਸੁਨੇਹੇ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਸਕੇ। ਇਹ ਲਾਗ ਸੁਨੇਹੇ ਨੂੰ ਸ਼ਾਮਿਲ ਕਰਨ ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਹੈ deque ਸਾਡੇ ਕਸਟਮ ਰਿੰਗ ਬਫਰ ਹੱਲ ਵਿੱਚ.
logging.handlers.MemoryHandler ਇਹ ਇੱਕ ਲਾਗਿੰਗ ਹੈਂਡਲਰ ਹੈ ਜੋ ਮੈਮੋਰੀ ਵਿੱਚ ਲਾਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਬਫਰ ਕਰਦਾ ਹੈ। ਇਹ ਉਹਨਾਂ ਨੂੰ ਫਲੱਸ਼ ਕਰਦਾ ਹੈ ਜਦੋਂ ਇੱਕ ਖਾਸ ਲਾਗ ਪੱਧਰ ਤੱਕ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ (ਇਸ ਕੇਸ ਵਿੱਚ, ਗਲਤੀ). ਇਹ ਲਾਗ ਸੁਨੇਹਿਆਂ ਦੇ ਆਉਟਪੁੱਟ ਨੂੰ ਮੁਲਤਵੀ ਕਰਨ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜਦੋਂ ਤੱਕ ਕੋਈ ਹੋਰ ਗੰਭੀਰ ਘਟਨਾ ਵਾਪਰਦੀ ਹੈ।
flushLevel=logging.ERROR ਨੂੰ ਇੱਕ ਦਲੀਲ ਦਿੱਤੀ ਗਈ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਲੌਗ ਪੱਧਰ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਜੋ ਬਫਰ ਕੀਤੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਅੰਤਮ ਮੰਜ਼ਿਲ (ਜਿਵੇਂ ਕਿ ਕੰਸੋਲ ਜਾਂ ਫਾਈਲ) ਤੱਕ ਫਲੱਸ਼ ਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਜੇਕਰ ਕੋਈ ਤਰੁੱਟੀ ਵਾਪਰਦੀ ਹੈ ਤਾਂ ਅਸੀਂ ਸਿਰਫ਼ ਡੀਬੱਗ ਲੌਗ ਵੇਖਦੇ ਹਾਂ।
setTarget(stream_handler) ਵਿਚ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਪਹੁੰਚ, ਇਹ ਵਿਧੀ ਟਾਰਗੇਟ ਹੈਂਡਲਰ ਨੂੰ ਸੈੱਟ ਕਰਦੀ ਹੈ ਜਿਸ ਨਾਲ ਬਫਰ ਕੀਤੇ ਲੌਗ ਫਲੱਸ਼ ਕੀਤੇ ਜਾਣਗੇ। ਇਸ ਮਾਮਲੇ ਵਿੱਚ, ਨਿਸ਼ਾਨਾ ਏ ਸਟ੍ਰੀਮਹੈਂਡਲਰ, ਜੋ ਕਿ ਕੰਸੋਲ ਲਈ ਲੌਗ ਆਉਟਪੁੱਟ ਕਰਦਾ ਹੈ।
format(record) ਲੌਗਿੰਗ ਮੋਡੀਊਲ ਦੇ ਫਾਰਮੈਟਿੰਗ ਸਿਸਟਮ ਦਾ ਹਿੱਸਾ। ਕਸਟਮ ਹੈਂਡਲਰ ਵਿੱਚ, ਇਹ ਵਿਧੀ ਲੌਗ ਰਿਕਾਰਡ ਨੂੰ ਰਿੰਗ ਬਫਰ ਵਿੱਚ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ ਫਾਰਮੈਟ ਕਰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਇਕਸਾਰ ਅਤੇ ਪੜ੍ਹਨਯੋਗ ਆਉਟਪੁੱਟ ਮਿਲਦੀ ਹੈ।
logger.addHandler(buffer_handler) ਕਸਟਮ ਜਾਂ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਨੂੰ ਲੌਗਰ ਨਾਲ ਨੱਥੀ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਇਹ ਹੈਂਡਲਰ ਦੀ ਸੰਰਚਨਾ (ਉਦਾਹਰਨ ਲਈ, ਬਫਰਿੰਗ, ਸਰਕੂਲਰ ਸਟੋਰੇਜ, ਆਦਿ) ਦੇ ਅਨੁਸਾਰ ਲੌਗ ਸੁਨੇਹਿਆਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਦਾ ਹੈ। ਇਹ ਕਮਾਂਡ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ ਸਾਡਾ ਬਫਰ ਲੌਗਿੰਗ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
logger.setLevel(logging.DEBUG) ਲੌਗਿੰਗ ਸੁਨੇਹਿਆਂ ਲਈ ਘੱਟੋ-ਘੱਟ ਗੰਭੀਰਤਾ ਪੱਧਰ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ। ਉਦਾਹਰਣਾਂ ਵਿੱਚ, ਇਸ ਨੂੰ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ ਡੀਬੱਗ ਕਰੋ, ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦੇ ਹੋਏ ਕਿ ਘੱਟ ਗੰਭੀਰ ਸੰਦੇਸ਼ਾਂ ਸਮੇਤ, ਸਾਰੇ ਸੁਨੇਹੇ ਕੈਪਚਰ ਕੀਤੇ ਗਏ ਹਨ ਅਤੇ ਬਾਅਦ ਵਿੱਚ ਜਾਂਚ ਲਈ ਬਫਰ ਕੀਤੇ ਗਏ ਹਨ।

ਪਾਈਥਨ ਵਿੱਚ ਗਲਤੀ ਤੇ ਹਾਲੀਆ ਲਾਗਾਂ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਕੈਪਚਰ ਕਰਨਾ

ਪੇਸ਼ ਕੀਤੀ ਗਈ ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਇੱਕ ਕਸਟਮ ਲੌਗਿੰਗ ਹੈਂਡਲਰ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ deque ਪਾਈਥਨ ਦੀ ਬਣਤਰ ਸੰਗ੍ਰਹਿ ਮੋਡੀਊਲ. ਇਹ ਡੀਕ ਇੱਕ ਰਿੰਗ ਬਫਰ ਦੇ ਤੌਰ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਹਾਲੀਆ ਲੌਗ ਸੁਨੇਹਿਆਂ ਦੀ ਇੱਕ ਨਿਸ਼ਚਿਤ ਗਿਣਤੀ ਹੁੰਦੀ ਹੈ। ਹੈਂਡਲਰ ਓਵਰਰਾਈਡ ਕਰਦਾ ਹੈ ਛੱਡਣਾ ਵਿਧੀ, ਜਿਸ ਨੂੰ ਹਰ ਵਾਰ ਲੌਗ ਤਿਆਰ ਕਰਨ 'ਤੇ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਵਿਧੀ ਵਿੱਚ, ਹਰੇਕ ਲੌਗ ਸੁਨੇਹੇ ਨੂੰ ਫਾਰਮੈਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਫਿਰ ਡੀਕ ਨਾਲ ਜੋੜਿਆ ਜਾਂਦਾ ਹੈ। ਕਿਉਂਕਿ ਡੈਕ ਦੀ ਅਧਿਕਤਮ ਲੰਬਾਈ ਹੁੰਦੀ ਹੈ, ਇਹ ਸਮਰੱਥਾ 'ਤੇ ਪਹੁੰਚਣ 'ਤੇ ਆਪਣੇ ਆਪ ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ। ਇਹ ਹੱਲ ਕੁਸ਼ਲਤਾ ਨਾਲ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲੌਗਸ ਨੂੰ ਟਰੈਕ ਕਰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਚੈਕਰ ਮੋਡੀਊਲ ਤੋਂ ਬਹੁਤ ਜ਼ਿਆਦਾ ਡੀਬੱਗ ਸੁਨੇਹੇ ਲੌਗ ਆਉਟਪੁੱਟ ਨੂੰ ਹਾਵੀ ਨਹੀਂ ਕਰਦੇ ਪਰ ਰਨਰ ਮੋਡੀਊਲ ਵਿੱਚ ਇੱਕ ਗਲਤੀ ਹੋਣ 'ਤੇ ਵੀ ਉਪਲਬਧ ਹੁੰਦੇ ਹਨ।

ਜਦੋਂ ਰਨਰ ਮੋਡੀਊਲ ਵਿੱਚ ਇੱਕ ਗਲਤੀ ਦਾ ਪਤਾ ਲਗਾਇਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਸਕ੍ਰਿਪਟ ਇੱਕ ਕਸਟਮ ਵਿਧੀ ਨੂੰ ਕਾਲ ਕਰਦੀ ਹੈ get_logs ਡੇਕ ਵਿੱਚ ਸਟੋਰ ਕੀਤੇ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ। ਇਹ ਤੁਹਾਨੂੰ ਚੈਕਰ ਤੋਂ ਲਾਗ ਸੁਨੇਹਿਆਂ ਦੀ ਜਾਂਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ ਜੋ ਗਲਤੀ ਤੋਂ ਤੁਰੰਤ ਪਹਿਲਾਂ ਸਨ। ਇਸ ਪਹੁੰਚ ਦੇ ਪਿੱਛੇ ਵਿਚਾਰ ਇਹ ਹੈ ਕਿ ਲਾਗ ਸੁਨੇਹੇ ਲੌਗ ਵਰਬੋਸਿਟੀ ਅਤੇ ਉਪਯੋਗਤਾ ਵਿਚਕਾਰ ਸੰਤੁਲਨ ਬਣਾਈ ਰੱਖਦੇ ਹੋਏ ਸਮੱਸਿਆ-ਨਿਪਟਾਰਾ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਸੰਦਰਭ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ। ਇਹ ਪਾਈਥਨ ਵਿੱਚ ਇੱਕ ਸਰਕੂਲਰ ਲੌਗ ਬਫਰ ਬਣਾਉਣ ਦਾ ਇੱਕ ਸਧਾਰਨ ਅਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਬੈਕਟਰੇਸ ਵਿਸ਼ੇਸ਼ਤਾ C++ ਦੀ spdlog ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ ਮਿਲਦੀ ਹੈ।

ਦੂਜਾ ਹੱਲ ਬਿਲਟ-ਇਨ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਪਾਈਥਨ ਦੇ ਲੌਗਿੰਗ ਮੋਡੀਊਲ ਤੋਂ। MemoryHandler ਮੈਮੋਰੀ ਵਿੱਚ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਬਫਰ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਸਿਰਫ਼ ਉਦੋਂ ਹੀ ਫਲੱਸ਼ ਕਰਕੇ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਇੱਕ ਖਾਸ ਲੌਗ ਪੱਧਰ ਦਾ ਸਾਹਮਣਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ ਗਲਤੀ. ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਹੈਂਡਲਰ ਨੂੰ 10 ਲੌਗ ਸੁਨੇਹਿਆਂ ਤੱਕ ਬਫਰ ਕਰਨ ਅਤੇ ਇੱਕ ਗਲਤੀ ਹੋਣ 'ਤੇ ਉਹਨਾਂ ਨੂੰ ਫਲੱਸ਼ ਕਰਨ ਲਈ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਪਹੁੰਚ ਰਿੰਗ ਬਫਰ ਤਕਨੀਕ ਵਰਗੀ ਹੈ ਪਰ ਪਾਈਥਨ ਦੇ ਮੌਜੂਦਾ ਲੌਗਿੰਗ ਬੁਨਿਆਦੀ ਢਾਂਚੇ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ, ਜੋ ਲਾਗੂ ਕਰਨ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ। MemoryHandler ਉਹਨਾਂ ਸਥਿਤੀਆਂ ਲਈ ਆਦਰਸ਼ ਹੈ ਜਿੱਥੇ ਤੁਸੀਂ ਲੌਗ ਸੁਨੇਹਿਆਂ ਦਾ ਇੱਕ ਸਨੈਪਸ਼ਾਟ ਕੈਪਚਰ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜੋ ਆਮ ਕਾਰਵਾਈਆਂ ਦੌਰਾਨ ਲੌਗਸ ਨੂੰ ਬੇਤਰਤੀਬ ਕੀਤੇ ਬਿਨਾਂ ਇੱਕ ਗਲਤੀ ਵੱਲ ਲੈ ਜਾਂਦਾ ਹੈ।

ਦੋਵੇਂ ਹੱਲ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਅਨੁਕੂਲਿਤ ਹਨ ਅਤੇ ਮੈਮੋਰੀ ਦੀ ਖਪਤ ਨੂੰ ਸੀਮਤ ਕਰਨ ਲਈ ਤਿਆਰ ਕੀਤੇ ਗਏ ਹਨ। ਮੈਮੋਰੀ ਵਿੱਚ ਸਟੋਰ ਕੀਤੇ ਲੌਗਾਂ ਦੀ ਸੰਖਿਆ ਨੂੰ ਸੀਮਤ ਕਰਕੇ ਅਤੇ ਨਾਜ਼ੁਕ ਘਟਨਾਵਾਂ ਦੌਰਾਨ ਬਫਰ ਨੂੰ ਫਲੱਸ਼ ਕਰਕੇ, ਉਹ ਸਾਫ਼, ਪ੍ਰਬੰਧਨਯੋਗ ਲੌਗਸ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ। ਇਹ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਬੇਲੋੜੀ ਜਾਣਕਾਰੀ ਦੀ ਵੱਡੀ ਮਾਤਰਾ ਵਿੱਚ ਖੋਜਣ ਦੀ ਬਜਾਏ ਅਸਲ ਗਲਤੀ ਨੂੰ ਡੀਬੱਗ ਕਰਨ 'ਤੇ ਧਿਆਨ ਦੇਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਹਰੇਕ ਸਕ੍ਰਿਪਟ ਨੂੰ ਮੌਜੂਦਾ ਪਾਈਥਨ ਲੌਗਿੰਗ ਸੰਰਚਨਾਵਾਂ ਵਿੱਚ ਆਸਾਨੀ ਨਾਲ ਲੌਗਰ ਵਿੱਚ ਕਸਟਮ ਜਾਂ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਜੋੜ ਕੇ ਜੋੜਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਅਤੇ ਦੋਵੇਂ ਵੱਖ-ਵੱਖ ਲੌਗ ਫਾਰਮੈਟਾਂ ਅਤੇ ਪੱਧਰਾਂ ਦੇ ਅਨੁਕੂਲ ਹੋਣ ਲਈ ਕਾਫ਼ੀ ਲਚਕਦਾਰ ਹਨ।

ਇੱਕ ਕਸਟਮ ਰਿੰਗ ਬਫਰ ਨਾਲ ਗਲਤੀ 'ਤੇ ਤਾਜ਼ਾ ਪਾਈਥਨ ਲੌਗਿੰਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨਾ

ਪਾਈਥਨ ਲੌਗਿੰਗ ਮੋਡੀਊਲ - ਕਸਟਮ ਰਿੰਗ ਬਫਰ ਲਾਗੂ ਕਰਨਾ

# Approach 1: Using a custom handler with a deque (ring buffer) to store recent logs
import logging
from collections import deque
# Custom log handler to store recent log messages
class BufferingHandler(logging.Handler):
    def __init__(self, capacity):
        super().__init__()
        self.log_buffer = deque(maxlen=capacity)  # Circular buffer
    def emit(self, record):
        self.log_buffer.append(self.format(record))  # Store formatted log messages
    def get_logs(self):
        return list(self.log_buffer)  # Retrieve recent log messages
# Configure logging with custom handler
logger = logging.getLogger('checker')
buffer_handler = BufferingHandler(capacity=10)
logger.addHandler(buffer_handler)
logger.setLevel(logging.DEBUG)
# Example log generation
for i in range(20):
    logger.debug(f"Debug message {i}")
# Simulate an error in runner and print the last few log messages
try:
    1 / 0  # Simulate error
except ZeroDivisionError:
    print("Error occurred, recent log messages:")
    for log in buffer_handler.get_logs():
        print(log)

ਪਾਈਥਨ ਵਿੱਚ ਬਫਰਡ ਲੌਗਿੰਗ ਲਈ MemoryHandler ਦੀ ਵਰਤੋਂ ਕਰਨਾ

ਪਾਈਥਨ ਲੌਗਿੰਗ ਮੋਡੀਊਲ - ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਪਹੁੰਚ

# Approach 2: Using MemoryHandler to buffer log messages
import logging
# MemoryHandler buffers log records in memory and flushes them when conditions are met
memory_handler = logging.handlers.MemoryHandler(capacity=10, flushLevel=logging.ERROR)
# Configuring logging with a stream handler for output
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)
# Attach the memory handler and stream handler to logger
logger = logging.getLogger('checker')
logger.setLevel(logging.DEBUG)
memory_handler.setTarget(stream_handler)
logger.addHandler(memory_handler)
# Generating some debug messages
for i in range(15):
    logger.debug(f"Debug message {i}")
# Simulate an error that will trigger the buffer to flush
logger.error("An error occurred in runner")
# The memory handler will now flush its buffer and show the last 10 messages

ਪਾਈਥਨ ਵਿੱਚ ਲੌਗ ਸੁਨੇਹੇ ਕੈਪਚਰ ਕਰਨ ਦੇ ਵਿਕਲਪਿਕ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰਨਾ

ਪਾਈਥਨ ਵਿੱਚ ਹਾਲੀਆ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਲਈ ਇੱਕ ਹੋਰ ਪਹੁੰਚ ਵਿੱਚ ਇੱਕ ਤੀਜੀ-ਧਿਰ ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਸ਼ਾਮਲ ਹੈ ਜਿਵੇਂ ਕਿ loguru. Python ਦੇ ਬਿਲਟ-ਇਨ ਲੌਗਿੰਗ ਮੋਡੀਊਲ ਦੇ ਉਲਟ, Loguru ਇੱਕ ਵਧੇਰੇ ਲਚਕਦਾਰ ਅਤੇ ਉਪਭੋਗਤਾ-ਅਨੁਕੂਲ ਇੰਟਰਫੇਸ ਪੇਸ਼ ਕਰਦਾ ਹੈ। ਇਸ ਵਿੱਚ ਲੌਗਾਂ ਨੂੰ ਘੁੰਮਾਉਣ, ਲੌਗ ਪੱਧਰਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨ, ਅਤੇ ਵੱਖ-ਵੱਖ ਫਾਰਮੈਟਾਂ ਵਿੱਚ ਲੌਗ ਕੈਪਚਰ ਕਰਨ ਲਈ ਬਿਲਟ-ਇਨ ਸਮਰਥਨ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਲਾਇਬ੍ਰੇਰੀ ਖਾਸ ਤੌਰ 'ਤੇ ਉਪਯੋਗੀ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹੋਏ ਜੋ ਬਹੁਤ ਜ਼ਿਆਦਾ ਲੌਗ ਤਿਆਰ ਕਰਦੇ ਹਨ, ਕਿਉਂਕਿ ਇਹ ਲੌਗ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ ਜਦੋਂ ਕਿ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਗਲਤੀ ਦੇ ਪ੍ਰਬੰਧਨ ਦੌਰਾਨ ਨਾਜ਼ੁਕ ਸੁਨੇਹੇ ਖੁੰਝੇ ਨਾ ਜਾਣ।

Loguru ਲੌਗ ਸਿੰਕ ਸਥਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਮੈਮੋਰੀ, ਫਾਈਲਾਂ, ਜਾਂ ਬਾਹਰੀ ਸੇਵਾਵਾਂ ਵਿੱਚ ਲੌਗ ਸਟੋਰ ਕਰਨ ਲਈ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਸਿੰਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਅਸਥਾਈ ਇਨ-ਮੈਮੋਰੀ ਬਫਰ ਬਣਾ ਸਕਦੇ ਹੋ, ਜਿਸ ਨੂੰ ਫਿਰ ਕਿਸੇ ਗਲਤੀ ਦਾ ਸਾਹਮਣਾ ਕਰਨ 'ਤੇ ਫਲੱਸ਼ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਇਹ ਲੋਗੁਰੂ ਨੂੰ ਉਹਨਾਂ ਲਈ ਇੱਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਵਿਕਲਪ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਸਟੈਂਡਰਡ ਲੌਗਿੰਗ ਲਾਇਬ੍ਰੇਰੀ ਵਾਂਗ ਹੈਂਡਲਰ ਨੂੰ ਹੱਥੀਂ ਸੰਰਚਿਤ ਕੀਤੇ ਬਿਨਾਂ ਆਪਣੇ ਲੌਗਿੰਗ ਸਿਸਟਮ ਉੱਤੇ ਵਧੇਰੇ ਨਿਯੰਤਰਣ ਚਾਹੁੰਦੇ ਹਨ।

Loguru ਦਾ ਇੱਕ ਹੋਰ ਫਾਇਦਾ ਇਹ ਹੈ ਕਿ ਇਹ ਮੌਜੂਦਾ ਲੌਗਿੰਗ ਸਿਸਟਮਾਂ ਦੇ ਨਾਲ ਆਸਾਨ ਏਕੀਕਰਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਮਤਲਬ ਕਿ ਤੁਸੀਂ ਆਪਣੇ ਪੂਰੇ ਲੌਗਿੰਗ ਸੈਟਅਪ ਨੂੰ ਓਵਰਹਾਲ ਕੀਤੇ ਬਿਨਾਂ Loguru ਵਿੱਚ ਸਵਿਚ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਗੁੰਝਲਦਾਰ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨਾਲ ਨਜਿੱਠਣ ਵੇਲੇ ਖਾਸ ਤੌਰ 'ਤੇ ਮਦਦਗਾਰ ਹੋ ਸਕਦਾ ਹੈ ਜਿੱਥੇ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਲੌਗ ਪ੍ਰਬੰਧਨ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦੇ ਹਨ। ਅਖੀਰ ਵਿੱਚ, ਜਦੋਂ ਕਿ ਪਾਈਥਨ ਦਾ ਲੌਗਿੰਗ ਮੋਡੀਊਲ ਜ਼ਿਆਦਾਤਰ ਵਰਤੋਂ ਦੇ ਮਾਮਲਿਆਂ ਲਈ ਕਾਫੀ ਹੈ, ਲੋਗੁਰੂ ਵਰਗੀਆਂ ਲਾਇਬ੍ਰੇਰੀਆਂ ਦੀ ਪੜਚੋਲ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਪ੍ਰਭਾਵੀ ਢੰਗ ਨਾਲ ਕੈਪਚਰ ਕਰਨ ਅਤੇ ਪ੍ਰਬੰਧਨ ਲਈ ਵਾਧੂ ਲਚਕਤਾ ਅਤੇ ਵਰਤੋਂ ਵਿੱਚ ਆਸਾਨੀ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।

ਪਾਈਥਨ ਵਿੱਚ ਲੌਗ ਸੁਨੇਹੇ ਕੈਪਚਰ ਕਰਨ ਬਾਰੇ ਆਮ ਸਵਾਲ

  1. ਮੈਂ ਲੌਗ ਸੰਦੇਸ਼ ਦੀ ਵਰਬੋਸਿਟੀ ਨੂੰ ਕਿਵੇਂ ਸੀਮਤ ਕਰ ਸਕਦਾ ਹਾਂ?
  2. ਵਰਤੋ logger.setLevel(logging.ERROR) ਡੀਬੱਗ ਅਤੇ ਜਾਣਕਾਰੀ ਵਰਗੇ ਘੱਟ ਤੀਬਰਤਾ ਵਾਲੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਦਬਾਉਣ ਲਈ, ਸਿਰਫ ਗਲਤੀਆਂ ਦਿਖਾ ਰਿਹਾ ਹੈ।
  3. ਮੈਮੋਰੀ ਵਿੱਚ ਹਾਲੀਆ ਲਾਗਾਂ ਨੂੰ ਸਟੋਰ ਕਰਨ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਤਰੀਕਾ ਕੀ ਹੈ?
  4. deque(maxlen=capacity) ਸਭ ਤੋਂ ਪੁਰਾਣੀਆਂ ਐਂਟਰੀਆਂ ਨੂੰ ਆਟੋਮੈਟਿਕ ਰੱਦ ਕਰਨ ਦੇ ਨਾਲ, ਹਾਲੀਆ ਲਾਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਸਟੋਰ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ।
  5. ਜਦੋਂ ਕੋਈ ਗਲਤੀ ਆਉਂਦੀ ਹੈ ਤਾਂ ਮੈਂ ਬਫਰ ਕੀਤੇ ਲੌਗਸ ਨੂੰ ਕਿਵੇਂ ਫਲੱਸ਼ ਕਰਾਂ?
  6. ਨਾਲ MemoryHandler, ਲੌਗਸ ਨੂੰ ਮੈਮੋਰੀ ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇੱਕ ਖਾਸ ਲੌਗ ਪੱਧਰ ਸ਼ੁਰੂ ਹੋਣ 'ਤੇ ਫਲੱਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ flushLevel=logging.ERROR.
  7. Python ਦੇ ਲਾਗਿੰਗ ਉੱਤੇ Loguru ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਕੀ ਫਾਇਦਾ ਹੈ?
  8. Loguru ਘੱਟ ਬਾਇਲਰਪਲੇਟ ਕੋਡ ਨਾਲ ਲੌਗ ਸੈਟਅਪ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਵਧੇਰੇ ਅਨੁਭਵੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਆਸਾਨ ਫਿਲਟਰਿੰਗ ਅਤੇ ਲੌਗ ਘੁੰਮਾਉਣਾ।
  9. ਕੀ ਮੈਂ ਲੋਗੁਰੂ ਨੂੰ ਮੌਜੂਦਾ ਲੌਗਿੰਗ ਸੰਰਚਨਾਵਾਂ ਨਾਲ ਜੋੜ ਸਕਦਾ ਹਾਂ?
  10. ਹਾਂ, ਲੋਗੁਰੂ ਡਿਫੌਲਟ ਲੌਗਿੰਗ ਹੈਂਡਲਰ ਨੂੰ ਬਦਲ ਕੇ ਪਾਈਥਨ ਦੇ ਬਿਲਟ-ਇਨ ਲੌਗਿੰਗ ਸਿਸਟਮ ਨਾਲ ਸੁਚਾਰੂ ਰੂਪ ਵਿੱਚ ਏਕੀਕ੍ਰਿਤ ਕਰ ਸਕਦਾ ਹੈ।

ਲੌਗ ਕੈਪਚਰ ਤਕਨੀਕਾਂ ਦਾ ਸੰਖੇਪ

ਗਲਤੀ-ਸੰਭਾਵੀ ਸਥਿਤੀਆਂ ਵਿੱਚ, ਪਾਈਥਨ ਦੇ ਲੌਗਿੰਗ ਮੋਡੀਊਲ ਦੀ ਵਰਤੋਂ ਕੁਸ਼ਲਤਾ ਨਾਲ ਆਊਟਪੁੱਟ ਵਿੱਚ ਗੜਬੜ ਕੀਤੇ ਬਿਨਾਂ ਹਾਲੀਆ ਲੌਗ ਸੁਨੇਹਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। ਕਸਟਮ ਹੈਂਡਲਰ ਜਿਵੇਂ ਕਿ deque ਅਤੇ ਮੈਮੋਰੀ ਹੈਂਡਲਰ ਜਦੋਂ ਕੋਈ ਗਲਤੀ ਹੁੰਦੀ ਹੈ ਤਾਂ ਮਹੱਤਵਪੂਰਨ ਸੰਦੇਸ਼ਾਂ ਨੂੰ ਸਟੋਰ ਕਰਨ ਦੇ ਬਹੁਪੱਖੀ ਤਰੀਕੇ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ।

ਇਹ ਹੱਲ ਉੱਚ ਵਰਬੋਸਿਟੀ ਵਾਲੇ ਮਾਡਿਊਲਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਨੂੰ ਡੀਬੱਗ ਕਰਨ ਲਈ ਵਿਹਾਰਕ ਹਨ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ ਡਿਵੈਲਪਰਾਂ ਕੋਲ ਲੋੜੀਂਦਾ ਲੌਗ ਡੇਟਾ ਉਪਲਬਧ ਹੈ। ਵਰਗੇ ਥਰਡ-ਪਾਰਟੀ ਟੂਲਸ ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਕੇ ਲੋਗੁਰੂ, ਘੱਟੋ-ਘੱਟ ਸੰਰਚਨਾ ਦੇ ਨਾਲ ਉੱਨਤ ਲਾਗ ਪ੍ਰਬੰਧਨ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦੇ ਹੋਏ, ਹੋਰ ਵੀ ਲਚਕਤਾ ਉਪਲਬਧ ਹੈ।

ਪਾਈਥਨ ਲੌਗਿੰਗ ਹੱਲ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
  1. ਪਾਈਥਨ ਦੀ ਵਿਆਖਿਆ deque ਲਾਗੂ ਕਰਨਾ ਅਤੇ ਲੌਗਿੰਗ ਵਿੱਚ ਇਸਦੀ ਵਰਤੋਂ: ਪਾਈਥਨ ਦਸਤਾਵੇਜ਼ੀ - ਸੰਗ੍ਰਹਿ
  2. ਪਾਈਥਨ 'ਤੇ ਵੇਰਵੇ ਲਾਗਿੰਗ ਲਾਇਬ੍ਰੇਰੀ ਅਤੇ ਮੈਮੋਰੀ ਹੈਂਡਲਰ: ਪਾਈਥਨ ਡੌਕੂਮੈਂਟੇਸ਼ਨ - ਲੌਗਿੰਗ
  3. ਦੀ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਲੋਗੁਰੂ ਇੱਕ ਉੱਨਤ ਪਾਈਥਨ ਲੌਗਿੰਗ ਵਿਕਲਪ ਵਜੋਂ: ਲੋਗੁਰੂ ਦਸਤਾਵੇਜ਼ੀ
  4. ਦੀ ਤੁਲਨਾ ਅਤੇ ਵਰਤੋਂ spdlog ਬੈਕਟਰੇਸ ਸਮਰਥਨ ਲਈ C++ ਵਿੱਚ: spdlog GitHub ਰਿਪੋਜ਼ਟਰੀ