ದೋಷ ನಿರ್ವಹಣೆಗಾಗಿ ಪೈಥಾನ್ ಲಾಗಿಂಗ್ ಅನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು
ಈವೆಂಟ್ಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಮತ್ತು ಪ್ರೋಗ್ರಾಂನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ಸಮಯದಲ್ಲಿ ಸಮಸ್ಯೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಪೈಥಾನ್ನಲ್ಲಿ ಲಾಗಿನ್ ಮಾಡುವುದು ಅತ್ಯಗತ್ಯ. ಆದಾಗ್ಯೂ, ಕೆಲವು ಮಾಡ್ಯೂಲ್ಗಳು ಹೆಚ್ಚಿನ ಜಾಡಿನ ಮಾಹಿತಿಯನ್ನು ಉತ್ಪಾದಿಸಬಹುದು, ಇದು ಲಾಗ್ಗಳನ್ನು ಅಸ್ತವ್ಯಸ್ತಗೊಳಿಸಬಹುದು. ಅಂತಹ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಸೂಕ್ತವಾದ ಲಾಗಿಂಗ್ ಮಟ್ಟವನ್ನು ಹೊಂದಿಸುವುದು, ಉದಾಹರಣೆಗೆ ದೋಷ, ಅನಗತ್ಯ ವಿವರಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಸಹಾಯ ಮಾಡಬಹುದು.
ಒಂದು ಮಾಡ್ಯೂಲ್ ವಿಪರೀತ ಲಾಗ್ಗಳನ್ನು ಉತ್ಪಾದಿಸುವ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ, ಆದರೆ ಇನ್ನೊಂದು ಮಾಡ್ಯೂಲ್ ಕರೆ ಮಾಡುವಲ್ಲಿ ದೋಷಗಳು ಸಂಭವಿಸುತ್ತವೆ, ಇತ್ತೀಚಿನ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಇದು ನಿರ್ಣಾಯಕವಾಗುತ್ತದೆ. ದೋಷದ ಮೂಲ ಕಾರಣವನ್ನು ಪತ್ತೆಹಚ್ಚುವಾಗ ಇದು ಹೆಚ್ಚಾಗಿ ಸಂಭವಿಸುತ್ತದೆ. ಮಿತಿಮೀರಿದ ದಾಖಲೆಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುವ ಮತ್ತು ಪ್ರಮುಖವಾದವುಗಳನ್ನು ಸೆರೆಹಿಡಿಯುವ ನಡುವೆ ಸಮತೋಲನದ ಅಗತ್ಯವಿದೆ.
ಗ್ರಂಥಾಲಯಗಳು ಇಷ್ಟ 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) | ಸಂದೇಶಗಳನ್ನು ಲಾಗಿಂಗ್ ಮಾಡಲು ಕನಿಷ್ಠ ತೀವ್ರತೆಯ ಮಟ್ಟವನ್ನು ವಿವರಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗಳಲ್ಲಿ, ಇದನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ ಡೀಬಗ್, ಕಡಿಮೆ ತೀವ್ರವಾದವುಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲಾಗಿದೆ ಮತ್ತು ನಂತರದ ತಪಾಸಣೆಗಾಗಿ ಬಫರ್ ಮಾಡಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು. |
ಪೈಥಾನ್ನಲ್ಲಿನ ದೋಷದಲ್ಲಿ ಇತ್ತೀಚಿನ ಲಾಗ್ಗಳನ್ನು ಸಮರ್ಥವಾಗಿ ಸೆರೆಹಿಡಿಯುವುದು
ಪ್ರಸ್ತುತಪಡಿಸಿದ ಮೊದಲ ಸ್ಕ್ರಿಪ್ಟ್ ಕಸ್ಟಮ್ ಲಾಗಿಂಗ್ ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ಬಳಸುತ್ತದೆ a deque ಪೈಥಾನ್ನಿಂದ ರಚನೆ ಸಂಗ್ರಹಣೆಗಳು ಮಾಡ್ಯೂಲ್. ಈ ಡಿಕ್ಯು ರಿಂಗ್ ಬಫರ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಇತ್ತೀಚಿನ ಲಾಗ್ ಸಂದೇಶಗಳ ಸ್ಥಿರ ಸಂಖ್ಯೆಯನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತದೆ. ಹ್ಯಾಂಡ್ಲರ್ ಅತಿಕ್ರಮಿಸುತ್ತದೆ ಹೊರಸೂಸುತ್ತವೆ ವಿಧಾನ, ಲಾಗ್ ಅನ್ನು ರಚಿಸಿದಾಗಲೆಲ್ಲಾ ಇದನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ. ಈ ವಿಧಾನದಲ್ಲಿ, ಪ್ರತಿ ಲಾಗ್ ಸಂದೇಶವನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಡಿಕ್ಯೂಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ. ಡೀಕ್ಯೂ ಗರಿಷ್ಠ ಉದ್ದವನ್ನು ಹೊಂದಿರುವ ಕಾರಣ, ಅದು ಸಾಮರ್ಥ್ಯವನ್ನು ತಲುಪಿದಾಗ ಅದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಳೆಯ ಸಂದೇಶಗಳನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ. ಈ ಪರಿಹಾರವು ಇತ್ತೀಚಿನ ಲಾಗ್ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ, ಪರೀಕ್ಷಕ ಮಾಡ್ಯೂಲ್ನಿಂದ ಹೆಚ್ಚಿನ ಡೀಬಗ್ ಸಂದೇಶಗಳು ಲಾಗ್ ಔಟ್ಪುಟ್ ಅನ್ನು ಅತಿಕ್ರಮಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ ಆದರೆ ರನ್ನರ್ ಮಾಡ್ಯೂಲ್ನಲ್ಲಿ ದೋಷ ಸಂಭವಿಸಿದಾಗ ಅವು ಇನ್ನೂ ಲಭ್ಯವಿರುತ್ತವೆ.
ರನ್ನರ್ ಮಾಡ್ಯೂಲ್ನಲ್ಲಿ ದೋಷ ಪತ್ತೆಯಾದಾಗ, ಸ್ಕ್ರಿಪ್ಟ್ ಕಸ್ಟಮ್ ವಿಧಾನವನ್ನು ಕರೆಯುತ್ತದೆ ಪಡೆಯಿರಿ_ಲಾಗ್ಗಳು deque ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಹಿಂಪಡೆಯಲು. ದೋಷದ ಮುಂಚಿನ ಚೆಕ್ಕರ್ನಿಂದ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಇದು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಲಾಗ್ ವರ್ಬೊಸಿಟಿ ಮತ್ತು ಉಪಯುಕ್ತತೆಯ ನಡುವೆ ಸಮತೋಲನವನ್ನು ಕಾಯ್ದುಕೊಳ್ಳುವಾಗ ದೋಷನಿವಾರಣೆಗೆ ಲಾಗ್ ಸಂದೇಶಗಳು ನಿರ್ಣಾಯಕ ಸಂದರ್ಭವನ್ನು ಒದಗಿಸುತ್ತವೆ ಎಂಬುದು ಈ ವಿಧಾನದ ಹಿಂದಿನ ಕಲ್ಪನೆ. ಪೈಥಾನ್ನಲ್ಲಿ ವೃತ್ತಾಕಾರದ ಲಾಗ್ ಬಫರ್ ಅನ್ನು ರಚಿಸಲು ಇದು ಸರಳ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಮಾರ್ಗವಾಗಿದೆ ಬ್ಯಾಕ್ಟ್ರೇಸ್ ವೈಶಿಷ್ಟ್ಯವು C++ ನ spdlog ಲೈಬ್ರರಿಯಲ್ಲಿ ಕಂಡುಬರುತ್ತದೆ.
ಎರಡನೆಯ ಪರಿಹಾರವು ಅಂತರ್ನಿರ್ಮಿತವನ್ನು ಬಳಸುತ್ತದೆ ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್ ಪೈಥಾನ್ನ ಲಾಗಿಂಗ್ ಮಾಡ್ಯೂಲ್ನಿಂದ. ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಮೆಮೊರಿಯಲ್ಲಿ ಬಫರ್ ಮಾಡುವ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಲಾಗ್ ಮಟ್ಟವನ್ನು ಎದುರಿಸಿದಾಗ ಮಾತ್ರ ಅವುಗಳನ್ನು ಫ್ಲಶ್ ಮಾಡುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ದೋಷ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು 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)
ಪೈಥಾನ್ನಲ್ಲಿ ಬಫರ್ಡ್ ಲಾಗಿಂಗ್ಗಾಗಿ ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ಬಳಸುವುದು
ಪೈಥಾನ್ ಲಾಗಿಂಗ್ ಮಾಡ್ಯೂಲ್ - ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್ ಅಪ್ರೋಚ್
# 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 ಹೆಚ್ಚು ಹೊಂದಿಕೊಳ್ಳುವ ಮತ್ತು ಬಳಕೆದಾರ ಸ್ನೇಹಿ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ನೀಡುತ್ತದೆ. ಇದು ಲಾಗ್ಗಳನ್ನು ತಿರುಗಿಸಲು, ಲಾಗ್ ಮಟ್ಟವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ಮತ್ತು ವಿವಿಧ ಸ್ವರೂಪಗಳಲ್ಲಿ ಲಾಗ್ಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಅಂತರ್ನಿರ್ಮಿತ ಬೆಂಬಲವನ್ನು ಒಳಗೊಂಡಿದೆ. ಅತಿಯಾದ ಲಾಗ್ಗಳನ್ನು ಉತ್ಪಾದಿಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಈ ಲೈಬ್ರರಿಯು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ದೋಷ ನಿರ್ವಹಣೆಯ ಸಮಯದಲ್ಲಿ ನಿರ್ಣಾಯಕ ಸಂದೇಶಗಳು ತಪ್ಪಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವಾಗ ಲಾಗ್ ನಿರ್ವಹಣೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ.
ಲಾಗ್ ಸಿಂಕ್ಗಳನ್ನು ಹೊಂದಿಸಲು Loguru ಅನುಮತಿಸುತ್ತದೆ, ಇದನ್ನು ಮೆಮೊರಿ, ಫೈಲ್ಗಳು ಅಥವಾ ಬಾಹ್ಯ ಸೇವೆಗಳಲ್ಲಿ ಲಾಗ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು. ಕಸ್ಟಮ್ ಸಿಂಕ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ತಾತ್ಕಾಲಿಕ ಇನ್-ಮೆಮೊರಿ ಬಫರ್ ಅನ್ನು ರಚಿಸಬಹುದು, ದೋಷವನ್ನು ಎದುರಿಸಿದ ನಂತರ ಅದನ್ನು ಫ್ಲಶ್ ಮಾಡಬಹುದು. ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಲಾಗಿಂಗ್ ಲೈಬ್ರರಿಯಲ್ಲಿರುವಂತೆ ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡದೆಯೇ ತಮ್ಮ ಲಾಗಿಂಗ್ ಸಿಸ್ಟಮ್ ಮೇಲೆ ಹೆಚ್ಚಿನ ನಿಯಂತ್ರಣವನ್ನು ಬಯಸುವವರಿಗೆ ಇದು Loguru ಅನ್ನು ಪ್ರಬಲ ಪರ್ಯಾಯವನ್ನಾಗಿ ಮಾಡುತ್ತದೆ.
Loguru ನ ಮತ್ತೊಂದು ಪ್ರಯೋಜನವೆಂದರೆ ಅದು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಲಾಗಿಂಗ್ ಸಿಸ್ಟಮ್ಗಳೊಂದಿಗೆ ಸುಲಭವಾದ ಏಕೀಕರಣವನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಅಂದರೆ ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಲಾಗಿಂಗ್ ಸೆಟಪ್ ಅನ್ನು ಕೂಲಂಕಷವಾಗಿ ಪರಿಶೀಲಿಸದೆಯೇ ನೀವು Loguru ಗೆ ಬದಲಾಯಿಸಬಹುದು. ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಲಾಗ್ ನಿರ್ವಹಣೆಯು ನಿರ್ಣಾಯಕವಾಗಿರುವ ಸಂಕೀರ್ಣ ಅಪ್ಲಿಕೇಶನ್ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ಇದು ವಿಶೇಷವಾಗಿ ಸಹಾಯಕವಾಗಬಹುದು. ಅಂತಿಮವಾಗಿ, ಪೈಥಾನ್ನ ಲಾಗಿಂಗ್ ಮಾಡ್ಯೂಲ್ ಹೆಚ್ಚಿನ ಬಳಕೆಯ ಸಂದರ್ಭಗಳಲ್ಲಿ ಸಾಕಾಗುತ್ತದೆ, Loguru ನಂತಹ ಲೈಬ್ರರಿಗಳನ್ನು ಅನ್ವೇಷಿಸುವುದು ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಸೆರೆಹಿಡಿಯಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು ಹೆಚ್ಚುವರಿ ನಮ್ಯತೆ ಮತ್ತು ಬಳಕೆಯ ಸುಲಭತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.
ಪೈಥಾನ್ನಲ್ಲಿ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಸೆರೆಹಿಡಿಯುವ ಕುರಿತು ಸಾಮಾನ್ಯ ಪ್ರಶ್ನೆಗಳು
- ಲಾಗ್ ಮೆಸೇಜ್ ವರ್ಬೊಸಿಟಿಯನ್ನು ನಾನು ಹೇಗೆ ಮಿತಿಗೊಳಿಸಬಹುದು?
- ಬಳಸಿ logger.setLevel(logging.ERROR) ಡೀಬಗ್ ಮತ್ತು ಮಾಹಿತಿಯಂತಹ ಕಡಿಮೆ ತೀವ್ರತೆಯ ಸಂದೇಶಗಳನ್ನು ನಿಗ್ರಹಿಸಲು, ದೋಷಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸುತ್ತದೆ.
- ಮೆಮೊರಿಯಲ್ಲಿ ಇತ್ತೀಚಿನ ದಾಖಲೆಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಉತ್ತಮ ಮಾರ್ಗ ಯಾವುದು?
- ಎ deque(maxlen=capacity) ಹಳೆಯ ನಮೂದುಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಿರಸ್ಕರಿಸುವುದರೊಂದಿಗೆ ಇತ್ತೀಚಿನ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಬಳಸಬಹುದು.
- ದೋಷ ಸಂಭವಿಸಿದಾಗ ನಾನು ಬಫರ್ ಮಾಡಿದ ಲಾಗ್ಗಳನ್ನು ಹೇಗೆ ಫ್ಲಶ್ ಮಾಡುವುದು?
- ಜೊತೆಗೆ MemoryHandler, ಲಾಗ್ಗಳನ್ನು ಮೆಮೊರಿಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಲಾಗ್ ಮಟ್ಟವನ್ನು ಪ್ರಚೋದಿಸಿದಾಗ ಫ್ಲಶ್ ಮಾಡಲಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ flushLevel=logging.ERROR.
- ಪೈಥಾನ್ನ ಲಾಗಿಂಗ್ನಲ್ಲಿ ಲೋಗುರುವನ್ನು ಬಳಸುವುದರಿಂದ ಏನು ಪ್ರಯೋಜನ?
- Loguru ಕಡಿಮೆ ಬಾಯ್ಲರ್ ಕೋಡ್ನೊಂದಿಗೆ ಲಾಗ್ ಸೆಟಪ್ ಅನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಸುಲಭವಾದ ಫಿಲ್ಟರಿಂಗ್ ಮತ್ತು ಲಾಗ್ಗಳನ್ನು ತಿರುಗಿಸುವಂತಹ ಹೆಚ್ಚು ಅರ್ಥಗರ್ಭಿತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.
- ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಲಾಗಿಂಗ್ ಕಾನ್ಫಿಗರೇಶನ್ಗಳೊಂದಿಗೆ ನಾನು Loguru ಅನ್ನು ಸಂಯೋಜಿಸಬಹುದೇ?
- ಹೌದು, ಲೋಗುರು ಡೀಫಾಲ್ಟ್ ಲಾಗಿಂಗ್ ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ಬದಲಿಸುವ ಮೂಲಕ ಪೈಥಾನ್ನ ಅಂತರ್ನಿರ್ಮಿತ ಲಾಗಿಂಗ್ ಸಿಸ್ಟಮ್ನೊಂದಿಗೆ ಸರಾಗವಾಗಿ ಸಂಯೋಜಿಸಬಹುದು.
ಲಾಗ್ ಕ್ಯಾಪ್ಚರ್ ಟೆಕ್ನಿಕ್ಸ್ ಅನ್ನು ಸಂಕ್ಷಿಪ್ತಗೊಳಿಸುವುದು
ದೋಷ-ಪೀಡಿತ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಪೈಥಾನ್ನ ಲಾಗಿಂಗ್ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸುವುದರಿಂದ ಔಟ್ಪುಟ್ ಅನ್ನು ಅಸ್ತವ್ಯಸ್ತಗೊಳಿಸದೆ ಇತ್ತೀಚಿನ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕಸ್ಟಮ್ ಹ್ಯಾಂಡ್ಲರ್ಗಳು deque ಮತ್ತು ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್ ದೋಷ ಸಂಭವಿಸಿದಾಗ ನಿರ್ಣಾಯಕ ಸಂದೇಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಬಹುಮುಖ ಮಾರ್ಗಗಳನ್ನು ಒದಗಿಸಿ.
ಹೆಚ್ಚಿನ ವಾಕ್ಚಾತುರ್ಯವನ್ನು ಹೊಂದಿರುವ ಮಾಡ್ಯೂಲ್ಗಳಲ್ಲಿನ ದೋಷಗಳನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಈ ಪರಿಹಾರಗಳು ಪ್ರಾಯೋಗಿಕವಾಗಿವೆ, ಡೆವಲಪರ್ಗಳು ಅಗತ್ಯವಾದ ಲಾಗ್ ಡೇಟಾ ಲಭ್ಯವಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತಾರೆ. ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಸಾಧನಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಲೋಗುರು, ಇನ್ನೂ ಹೆಚ್ಚಿನ ನಮ್ಯತೆ ಲಭ್ಯವಿದೆ, ಕನಿಷ್ಠ ಸಂರಚನೆಯೊಂದಿಗೆ ಸುಧಾರಿತ ಲಾಗ್ ನಿರ್ವಹಣೆಯನ್ನು ನೀಡುತ್ತದೆ.
ಪೈಥಾನ್ ಲಾಗಿಂಗ್ ಪರಿಹಾರಗಳಿಗಾಗಿ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- ಪೈಥಾನ್ನ ವಿವರಣೆ deque ಅನುಷ್ಠಾನ ಮತ್ತು ಲಾಗಿಂಗ್ನಲ್ಲಿ ಅದರ ಬಳಕೆ: ಪೈಥಾನ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ - ಸಂಗ್ರಹಣೆಗಳು
- ಪೈಥಾನ್ನ ವಿವರಗಳು ಲಾಗಿಂಗ್ ಲೈಬ್ರರಿ ಮತ್ತು ಮೆಮೊರಿ ಹ್ಯಾಂಡ್ಲರ್: ಪೈಥಾನ್ ಡಾಕ್ಯುಮೆಂಟೇಶನ್ - ಲಾಗಿಂಗ್
- ನ ಅವಲೋಕನ ಲೋಗುರು ಮುಂದುವರಿದ ಪೈಥಾನ್ ಲಾಗಿಂಗ್ ಪರ್ಯಾಯವಾಗಿ: ಲೋಗುರು ದಾಖಲೆ
- ಹೋಲಿಕೆ ಮತ್ತು ಬಳಕೆ spdlog ಬ್ಯಾಕ್ಟ್ರೇಸ್ ಬೆಂಬಲಕ್ಕಾಗಿ C++ ನಲ್ಲಿ: spdlog GitHub ರೆಪೊಸಿಟರಿ