Modern Python logging

  Рет қаралды 209,460

mCoding

mCoding

Күн бұрын

Пікірлер: 370
@bombase991
@bombase991 9 ай бұрын
18:04 Leaving a note here that QueueHandler config is only available in Python 3.12, according to the logging.config docs
@thisoldproperty
@thisoldproperty 11 ай бұрын
Jeans down, this is the best python logging explanation I've ever seen. Brilliant work.
@threeme2189
@threeme2189 11 ай бұрын
I will start saying jeans down instead of hands down from this day on. It is, jeans down, the better of the two!
@hammerheadcorvette4
@hammerheadcorvette4 11 ай бұрын
Jeans Down?!
@greob
@greob 11 ай бұрын
⁠pants down
@mCoding
@mCoding 11 ай бұрын
Agreed, we all say "jeans down" now.
@thomasbrunelouellet4370
@thomasbrunelouellet4370 8 ай бұрын
the best ever
@keslauche1779
@keslauche1779 10 ай бұрын
This channel is dangerously underrated
@skewty
@skewty 5 ай бұрын
Expert level developers don't often create a lot of KZbin content. Like StackOverflow where most solutions aren't production level good.
@atrus3823
@atrus3823 11 ай бұрын
I’ve always found Python logging super opaque. After hours of reading and playing around, I still never really understood it. Somehow, in 20 minutes, you covered way more than I even knew was possible and it all makes so much sense now! Thank you! PS: Still waiting on your C++ value category video 🤞
@maxrinehart4177
@maxrinehart4177 11 ай бұрын
That why I love the old style programming youtubers, unlike the new programming influencers who react to articles and tech news. Mad respect for you James. ❤
@mCoding
@mCoding 11 ай бұрын
My only hesitation with value categories video is that I have to choose whether it will be slightly incorrect or slightly incomprehensible.
@atrus3823
@atrus3823 11 ай бұрын
​@@mCoding I'll accept either 😂. It's just another topic I struggle with, and you always have a way for making things understandable 🙏
@heroe1486
@heroe1486 9 ай бұрын
@@maxrinehart4177Or straight up say nonsense and are closer to instagram influencers than actual devs, like a certain "blond" one, the problem is that there are some juniors listening to them
@maxrinehart4177
@maxrinehart4177 9 ай бұрын
@@heroe1486 it's a disease, spilled out from instathots to wannabe programmers, the problem is the huge numbers of followers who watch this nonsense that bring no value. They bring nothing of value and it's a crime they are so popular and the actual competent tech youtubers are not. Not only the blonde one but that another guy called prime, he deleted my comments and banned me for saying his react videos bring no actual values.
@yxh
@yxh 10 ай бұрын
This is my favorite format of your videos so far. No memey images, just solid information with dry humor and guiding text peppered helpfully throughout. Great content as usual.
@megaing1322
@megaing1322 11 ай бұрын
That "include the timezone, *trust me*" has some history... xD
@hemerythrin
@hemerythrin 11 ай бұрын
"If you trust your users to do that kind of thing... *silent head shake*"
@Jakub1989YTb
@Jakub1989YTb 11 ай бұрын
Working with time is the worst :D *trust me*. HAving users in another timezone... I'd rather write them a whole separate app :D
@Naej7
@Naej7 11 ай бұрын
Don’t use timezones, put everything in UTC
@playerguy2
@playerguy2 11 ай бұрын
While I never had this issue before, the first time I hand-rolled a logging system for a small service _I was later glad I had the foresight to include the offset from UTC._
@playerguy2
@playerguy2 11 ай бұрын
​@@hemerythrintrust users? Buddy, I don't trust myself.
@alejandropinero8530
@alejandropinero8530 11 ай бұрын
This breakdown on the logger is truly amazing. One comment regarding the queue handler implementation 18:11 . This implementation only works, as is, on Python 3.12 as prior versions don't have that available for dictConfig.
@mCoding
@mCoding 11 ай бұрын
Thank you, and you are right. Users not yet on the current stable Python (3.12) may want to subclass QueueHandler, both to create the QueueListener as well as to start its thread automatically.
@jrat104
@jrat104 10 ай бұрын
@@mCodingI was looking forward to using this but i am stuck at 3.9 for reasons. Now to figure out how to do this
@austinraney
@austinraney 2 ай бұрын
@@jrat104 you could do something like: ```python import logging.config import logging.handlers class BackportedQueueHandler(logging.handlers.QueueHandler): def __init__( self, handlers: logging.config.ConvertingList[str], queue=None, respect_handler_level: bool = False, ) -> None: if queue is None: import queue as q queue = q.Queue() assert isinstance(handlers, logging.config.ConvertingList) self.listener = logging.handlers.QueueListener( queue, # NOTE: `logging.config.ConvertingList` converts elements by # calling `convert_with_key` when accessed via `__getitem__` *[handlers[i] for i in range(len(handlers))], respect_handler_level=respect_handler_level, ) super().__init__(queue) ```
@Jakub1989YTb
@Jakub1989YTb 11 ай бұрын
Thank you for this tutorial. Nothing new for me, but finally a nice comprehensive and modern approach. I totally agree with the statement "the tutorials are from people that are not using it". Sadly that's true for many other tutorials.
@draufunddran
@draufunddran 11 ай бұрын
Wow... every python video from you is pure Gold. I'm only aware of one "recent" async video, but maybe you could do a more detailed video on async and await in python. I and certainly thousands of others would appreciate this. Keep up the awesome work!
@djl3009
@djl3009 11 ай бұрын
The "complete logging picture" @02:44 is what I've been missing. Thank you!
@69k_gold
@69k_gold 10 ай бұрын
The reason I love this channel and learned a lot from it is, James is one of the few programming content creators that have experience. Him saying "You know what works best for you" is an ironclad example for that
@ChrisJones-hv7mo
@ChrisJones-hv7mo 10 ай бұрын
This is a great deal better than other Python logging videos and tutorials that I have seen. They might cover the basics, but miss out pretty much entirely about information you need to know when you really want to get into logging with packages, subpackages, and user libraries, Thanks.
@PBJYM
@PBJYM 11 ай бұрын
I've literally been trying to understand python logging for the past few days. This is easily the best video I've come across!
@youtux2
@youtux2 3 ай бұрын
I realised my "meh" feeling about dictConfig was due to ignorance and laziness! Thanks for a great, professional tutorial!
@CaptainCsaba
@CaptainCsaba 11 ай бұрын
Finally I understand Python logging. I really hope one day they actually create a better logging package. Every project needs logging and it should not be this difficult and outdated, especially when it comes to Python.
@youtubeenjoyer1743
@youtubeenjoyer1743 10 ай бұрын
Have you seen the most popular packages on pypi? It is full of libraries built with bad decisions, bad API design, bad programming practices, bad documentation. And recently it has gotten even worse, because now all code is either type hinted or not, and is written for asyncio or not. And these new async packages are going through all the same problems that were solved decades ago for the older packages. It’s a huge mess.
@italianphilosopher6571
@italianphilosopher6571 10 ай бұрын
It's Java-inspired. Difficulty, unobviousness and fussiness are a feature, not a bug.
@penguindrummaster
@penguindrummaster 11 ай бұрын
As someone who owns a library, and rolled my own logger (in JavaScript), I appreciate the deep dive in proper logger design and methodology. I may not be able to use the examples here, but the lesson is well-received. As a self-taught developer, I missed a lot of the history in why things are written the way they are.
@DJStompZone
@DJStompZone 11 ай бұрын
You own a library? Nice! Do you have one of those rolling ladders to get to the high-up books?
@SenukiQ
@SenukiQ 11 ай бұрын
Great video on standard library logging, but one thing to add is that I can recommend using library called structlog (for structured logs as name suggests), which are very useful especially for bigger applications, where we want to aggregate, store, parse and analyze logs on the system level. Structured logs are way easier to parse, thus analyze, so I think it's nice to have this library in your Python dev toolkit.
@allyouneed247
@allyouneed247 4 ай бұрын
As someone who’s been using print for logging, I will have to watch this a couple more times to fully understand everything 😅 First impressions is that this seems very useful, and that although comprehensive and complex to set up for the first time, some parts should be reusable. At least for smaller projects. Most of my projects are about 500 lines of code, so this would be a substantial portion of the work setting up the first time😅 Thank you for setting me on the path of proper logging 🎉
@AzinFiro
@AzinFiro 11 ай бұрын
For anyone interested in quick and dirty logging for debug purposes, there's also watchpoints, which lets you monitor any variable for changes.
@wchen2340
@wchen2340 9 ай бұрын
keep talking!
@AzinFiro
@AzinFiro 9 ай бұрын
@@wchen2340 rich.inspect()
@AzinFiro
@AzinFiro 9 ай бұрын
@@wchen2340 Use rich inspect() instead of print().
@willemvdk4886
@willemvdk4886 11 ай бұрын
This is a great condensed tutorial, respect! But, I do need to add that I don't really agree on the "one logger only" rule. In a lot of cases I have learned it's very valuable to seperate logging user activity from the technical logging. In a lot of applications you would want to log user activities for legal reasons and have the technical stuff for development reasons. I'm a big proponent of seperating the two. In most applications I've worked on we have a technical logger and an audit logger. They both log VERY different stuff and have different handlers and formatters. Technical stuff goes into files and sometimes email inboxes while the audit logs go into some elastic search cluster through a kafka bus just to make sure we have the persistence.
@VarunSeth
@VarunSeth 11 ай бұрын
This is an incredibly valuable information. Since this is only applicable for applications and not libraries, this is not openly discussed anywhere nor available on Github. Thanks for sharing.
@Mathymagical
@Mathymagical 11 ай бұрын
I appreciate that you emphasized that the built-in logging library is the standard. Since there are some other competitors out there, it can be a bit confusing trying to evaluate whether to use the built-in or not. Thank you.
@DagarCoH
@DagarCoH 11 ай бұрын
When I started with the current professional work, I looked into Python logging, found many people frustrated, and wrote the logger myself. Normally I am not a fan of the DIY mentality in software, but I think I saved time this way and have what I need.
@omgwtfafterparty
@omgwtfafterparty 11 ай бұрын
When I started working with the logging module it seemed difficult to understand. But actually, after 2-3 hours I admired how powerful yet simple it turns out to be. Really, you plug it in and it just works.
@bertjanbakker9497
@bertjanbakker9497 10 ай бұрын
Very very good. The explanation of the mental model is Gold! Finally a video that makes it simpler by showing the whole picture and what to skip instead of just showing the bare minimum which would leave you too ignorant to see both the the forrest and the trees.
@playea123
@playea123 11 ай бұрын
Loguru is straight up the best
@markasiala6355
@markasiala6355 11 ай бұрын
I recently found this as well. Great library.
@karserasl
@karserasl 11 ай бұрын
Also thread safe. There isnt any reason why you shouldn't use loguru everywhere
@dandan-gf4jk
@dandan-gf4jk 11 ай бұрын
lol my comment got deleted but this thread reads like those crypto scams😂
@marcbresson6548
@marcbresson6548 9 ай бұрын
@@karseraslactually there is. Loguru does not support multiple loggers. There is only one.
@jesusromero9167
@jesusromero9167 8 ай бұрын
Sometimes I don't understand a word you say, not because of your videos, but for the current knowledge I have. I still enjoyed your videos 😃
@RandomAlexus
@RandomAlexus 10 ай бұрын
Animations are nice, but knowing that it's his hand dragging/dropping the graphics makes this intuitive to follow. Great subtlety of presentation.
@pablofueros
@pablofueros 11 ай бұрын
A video like this was much needed in KZbin, thanks so much! I've learn some new things I can now work on
@jeroenvermunt3372
@jeroenvermunt3372 11 ай бұрын
I cannot overstate the value of this video. I was postponing e deep dive into logging, which I would have had this video sooner!
@douglasamoo-sargon5049
@douglasamoo-sargon5049 2 ай бұрын
if you are experiencing an error of ValueError: Unable to configure handler 'file' when you added the file logger, ensure that you have have log folder in your current directory. Great video btw
@MaxNeumann-k8m
@MaxNeumann-k8m 3 ай бұрын
Thanks for the great explanation! However, it's not quite clear to me why you shouldn't use the root logger directly 6:49 when you're not using some sort of logger tree. Could anyone explain this?
@vasudevmenon2496
@vasudevmenon2496 8 ай бұрын
I used a mix of print and logging in my application just to take quick look of what happened at a glance. Wasn't aware of json lines and queue handler. I had switched from standard json library to orjson to get considerable speedup when handling mixture of celery task uuid, objects, dates in different formats etc. Thanks for sharing
@aliwelchoo
@aliwelchoo 11 ай бұрын
My team and I have recently been working with trying to get multiple loggers setup and deleting the old logs locally after some time. I'd say this is incredible timing but I'd be lying, having this massively useful video would have been even better last week! But still, thanks so much for sharing your expertise!
@mCoding
@mCoding 11 ай бұрын
Sounds like you need to hire us to do a code review! You're very welcome regardless.
@aliwelchoo
@aliwelchoo 11 ай бұрын
Code & architecture review I'd say! I'll definitely be seeing whether we can
@RedPsyched
@RedPsyched 11 ай бұрын
Not me watching the video and configuring my library logging bit by bit and then seeing the note at the end for libraries LMAO. Oh well, time to delete all that code. Great video though, definitely will use these tips in my Python apps.
@mCoding
@mCoding 11 ай бұрын
Whoops lol. 🤭
@hidroman1993
@hidroman1993 11 ай бұрын
The acting on this video is impeccable
@kacperkwasny3848
@kacperkwasny3848 10 ай бұрын
i love you. i didnt google for logging tutorial. I just watch your videos whenever there is a new on my main page
@richardcoppin5332
@richardcoppin5332 11 ай бұрын
Added to my reference library. This is invaluable. Thank you @mCoding.
@Vijay-Yarramsetty
@Vijay-Yarramsetty 10 ай бұрын
this is geniusly explained of how to use rarely used logging
@23wojtekk
@23wojtekk 11 ай бұрын
One of the best Python channels on KZbin, great tutorial
@slash_me
@slash_me 11 ай бұрын
Great video, I've been using logging for a while, but I might tune my setup with what I learned just now! I agree that yaml is very error prone (look up "Norway problem"), but I've also come to the conclusion that JSON is good for data exchange, but not for config files. For config, I've started using TOML. The syntax is a mix of JSON and .ini, but it's far less error prone than yaml, it has trailing commas, comments and can be read and written programmatically without losing formatting. Like yaml, it wasn't included in the stdlib, but there is now an implementation in Python 3.11+
@D0Samp
@D0Samp 11 ай бұрын
There's also JSON5 as an extension for human-writable JSON that allows such things as trailing commas in objects and lists, comments, single quote strings, hexadecimal numbers etc. For example, it's used for the configuration file of the Windows 11 terminal app. The JSON module in the Python library is only meant for serialization, however.
@Lanxxe
@Lanxxe 11 ай бұрын
Just introduced myself to the logging module a week back, nice coincidence you making this video
@TboneIsRogue
@TboneIsRogue 10 ай бұрын
This is very nice. Extremely useful for out-of-the-box best practices for Python logging. I personally use "pip install loguru" for any projects I set up for logging, since it handles a lot of things automatically and removes so much boiletplate.
@er63438
@er63438 8 ай бұрын
Really great video, thank you! On 20:00, it's worth mentioning that the default behavior, if I'm not mistaken, is for debug/info logs to go to stderr as well which I've always found unintuitive.
@mCoding
@mCoding 8 ай бұрын
Yeah, I've found that to be an unintuitive default as well. It goes against the principle of not using stderr as just an extra stream. It should really be just for errors as intended.
@LorenzoPersichetti
@LorenzoPersichetti 11 ай бұрын
Best python logging video ever.
@dbreakiron
@dbreakiron 10 ай бұрын
This is, by far, the most clear and helpful explanation of Python logging I've ever seen. Thank you!
@HansStrijker
@HansStrijker 9 ай бұрын
Dude... I've been using logger since.... _years_ , and I had no notion of dictConfig's existence! Fair enough, I'm a DevOps/SysOps guy, so I pretty much only use the same handlers, stdout, stderr, and systemd-journald, which makes things easy enough to knock out, but still. Thanks! 🙂
@TonyHammitt
@TonyHammitt 11 ай бұрын
I like to also set up probabilistic trace logging, where some (usually small) portion of the work is logged end to end, with the portion changeable at runtime. If something doesn't seem right, being able to trace 1 of 10000 events can be really handy. That takes a bit more setup in the code, but it's super useful.
@JonathanHeavyside
@JonathanHeavyside 11 ай бұрын
Epic walkthrough. The standard logger has always been a bit of a black box and logs have always been a bit of an issue as my apps have grown. This is exactly what I needed.
@malcolmanderson6735
@malcolmanderson6735 7 ай бұрын
at the 10:48 mark I cannot get the system to write logs to file. I tried pulling the code from github but the main.py file is not versioned like the config files. I've got a few things to check, but when you are showing files in the video at 10:48 you don't show the bottom of them. I've found a message somewhere on the boards that indicates I may need to make sure I'm using the right logger or logging.
@amazingbanter
@amazingbanter 10 ай бұрын
structured logging gold. Thank you, Mr. Murphy!
@this-one
@this-one 11 ай бұрын
This is some invaluable information. Thanks for the video.
@mCoding
@mCoding 11 ай бұрын
Glad you enjoyed it!
@DhiyaIndia
@DhiyaIndia 10 ай бұрын
pure gold! I been wanting to master the logging concepts for a long time now!
@kevon217
@kevon217 11 ай бұрын
Best video on logging I’ve seen yet. Learned a lot, thanks!
@gloweye
@gloweye 11 ай бұрын
I remember having to explicitly murder a library's own logging config, because they were logging as plain text and we wanted everything as JSON. It was very annoying until I did some involved introspection on the logging system.
@mCoding
@mCoding 11 ай бұрын
Haha, what a vivid depiction, I've felt that pain, too.
@kervinsingh6213
@kervinsingh6213 8 ай бұрын
Hi, what does override do at 16:33 ? from your code, you used "from typing import override". I would've assumed you were overriding the class method but this doesn't seem to be the case.
@UTl0l
@UTl0l 10 ай бұрын
Thx for a very good explanation of python logging. I've done this whole thing so many times at different companies, in different way. The queue handler was new to me however, I guess performance wasn't of that importance. One thing I would add is that while JSON format is great for programmatically parsing, I wouldn't say it's as human readable as colorized text. This is what I would use locally when developing and then use JSON when deployed.
@unperrier5998
@unperrier5998 11 ай бұрын
Thanks. One thing you could have mentionned is that a library developper could create a filter for his own logger(s).
@andreymelnik384
@andreymelnik384 5 ай бұрын
@5:44 I think you misunderstand something or at least are being ambiguous in the following statement: "Once again, if a record is dropped by a handler it will continue moving on, to include propagating up to the parent. But if it's dropped by a Logger, then it stops and doesn't propagate." It would be more accurate to say that Loggers cannot "drop" messages, they only can "generate" or "not generate" them. In other words, a Logger may only drop messages it created: if a message survives its "source" Logger then it will be propagated up to the root (unless `propagate` is set to False). For example, if Root Logger has level `ERROR` and Logger A has level `DEBUG`, then debug messages originating at A will be handled by the Root Logger, despite it having a higher threshold. This is why you might want to add permissive-level handlers to restrictive-level loggers. Python's "Logging HOWTO" says: "In addition to any handlers directly associated with a logger, all handlers associated with all ancestors of the logger are called to dispatch the message (unless the propagate flag for a logger is set to a false value, at which point the passing to ancestor handlers stops)."
@997Pancakes
@997Pancakes 10 ай бұрын
This is amazing content. Very concise and thorough, and you cover the concept in much greater depth than any other sources I've come across.
@allyouneed247
@allyouneed247 3 ай бұрын
I've noticed something confusing in the final version, where the logged messages in the terminal have the correct value for time zones while the jsonl files have +00:00. Is this intended and something I misunderstand or is this an error. I've used the original source code only changing file names.
@ericklopez9754
@ericklopez9754 10 ай бұрын
Great video, can you do a video on "try except" code blocks; I believe its blurry for a lot of people who aren't working in the industry as far as HOW to use it in your coding project. For example, do you apply it to all of your code logic ? or conservatively ? An in-depth explanation and examples when you're working in industry and you're writing code how exactly would you apply it?, whats your thinking framework with it ??? Thank you very much for the quality content.
@POINTS2
@POINTS2 11 ай бұрын
Is there anything that would be done differently for logging with pytest?
@siddharthsvnit
@siddharthsvnit 10 ай бұрын
you really have great content, and the detail in which you go to explain a concept is really appreciation worthy. thanks for these videos, they are really informative and helpful
@joaopedrodonasolo680
@joaopedrodonasolo680 11 ай бұрын
Finished yesterday a one week long logging project. If only I had watched your video before that...
@Rickety3263
@Rickety3263 11 ай бұрын
You had me cracking up. This is very relevant in what I’m working on right now. Gonna create a new boilerplate
@plukerpluck
@plukerpluck 11 ай бұрын
You suggest only using one logger (or a small number) rather than __name__, but is it really a bad cost to have one per file? Using __name__ does have perks, such as "automatically" providing a nested structure for easy control without any actual major downside that I can see. It also avoids you ever having to actually maintain your loggers name, which is an incredibly minor thing, but I'm always a fan of removing stuff like that. If it's secretly a massive performance hit though? Then yeah, maybe I'll stop doing it! But great video as always! Side note: Your website looks kind of weird on an ultrawide. Not bad, just a little weird. The footer is much wider than the content.
@mCoding
@mCoding 11 ай бұрын
Great questions! You are still welcome to use `__name__`, although it mostly only makes sense if you are defining your logger within an `__init__.py` or if your code is just a single module. For larger applications, your logging setup is probably in some kind of config or logging module, and it would be a bit weird to name your logger `mypackage.logging` or `mypackage.config` instead of `mypackage`. But for a single file it does make a lot of sense to use `__name__`. The memory hit is honestly not that bad, unless you are really constrained or have 1000s of files, although what gets you with `__name__` is that propagation can start to add up on all those middle loggers that do nothing.
@sqrt4788
@sqrt4788 11 ай бұрын
Great and concise content, did not know about dictconfig yet. Thanks! Around 08:40 you mention the weird format str syntax. As an alternative there is the style keyword which accepts "{", then the format str can be much more like fstrings.
@mCoding
@mCoding 11 ай бұрын
Great tip! I do tend to stick to the json approach, though! 😉
@Kroppeb
@Kroppeb 11 ай бұрын
What's your opinion on loguru vs stdlib logging?
@sonluuh
@sonluuh 11 ай бұрын
Nice tips for the Queue Handlers! Btw, be careful with thread-safe logging if you are using multi-thread inside your application
@Jokertyf
@Jokertyf 11 ай бұрын
I always disliked how much boilerplate you need to do if all you're interested in is logging to stdout but selecting different levels for different paths. In an ideal world there's be some middle ground between just basicConfig and super detailed dictConfig
@mCoding
@mCoding 11 ай бұрын
I'm there with you. Thankfully logging is typically a once-per-project setup thing that doesn't change much, so it gets lumped in with all my other one-time setups.
@NostraDavid2
@NostraDavid2 11 ай бұрын
Or, if you have multiple projects, create your own logging lib that pre-configures what you need. That's what we did with structlog, so now all our applications output ECS-compatible JSON logging. ECS is the Elastic Comming Schema. The E in the ELK stack, enabling us to find our logs in Kibana, letting us search for keys or values, and create dashboards.
@christopheroverbeck3662
@christopheroverbeck3662 7 ай бұрын
How do we feel about sqlite logs?
@robosergTV
@robosergTV 10 ай бұрын
Thanks for the video. So should all my library functions use "logger.info" and not "logging.info" ? I assumed you said that the library modules should not configure the logging, so that the configuration is made once in the application layer. However if I use "logging.info" in my submodules, your proposed approach with the Dict config (using logging.config.dictConfig) does not seem to work. In the logging_config, I define the "root" logger, to overwrite config of the root logger, so that all modules can have "logging.info". However using logging.config.dictConfig does not work, I dont see any messages. Using "logging.basicConfig" works, but it does not allow to use several handlers.
@sambroderick5156
@sambroderick5156 11 ай бұрын
Excellent logging summary/best practices! Thank you so much!
@player-eric
@player-eric 10 ай бұрын
Thanks sincerely for your brilliant video. I have a question that PyCharm seems not to have a good support for color display of the different levels for the logging module.
@IshayahuLastov
@IshayahuLastov 11 ай бұрын
If I shouldn't use root logger, why all configuration I should keep in root logger and not in my on?
@javiercmh
@javiercmh 8 ай бұрын
Thanks for the video!! I've followed every step using Python 3.10, however it throws an error when defining the queue_handler handler. Python says that QueueHandler.__init__() got an unexpected keyword argument 'handlers'... is it a specific Python 3.10 problem?
@aeronesto
@aeronesto 9 ай бұрын
Very thorough! Thank you for putting this together! Well done!
@tylernardone3788
@tylernardone3788 3 күн бұрын
Does the QueueHandler need to passed a queue object after loaded from the config?
@rembautimes8808
@rembautimes8808 5 ай бұрын
Very comprehensive tutorial thanks for sharing.
@Ca1vema
@Ca1vema 10 ай бұрын
The most basic concepts of python logging module people don't understand is that configuration of logging itself must be done by the end user, not frameworks or libraries, all what they suppose to do is to import logging, get logger and do logging calls.
@TotallyFred
@TotallyFred 11 ай бұрын
Best. Explanation. Ever. Thank you.
@mCoding
@mCoding 11 ай бұрын
You're very welcome!
@chrishillery
@chrishillery 11 ай бұрын
Amazing, comprehensive, and clear. Thank you.
@kotslike
@kotslike 10 ай бұрын
I salute you mister for enlightening us with this video. Thank you very much!
@etis398
@etis398 11 ай бұрын
This video is a gift from heaven 🎉 Thanks so lot for making such high quality content helping devs around the world write better code
@mCoding
@mCoding 11 ай бұрын
I appreciate your very kind praise 😅
@robotnaoborot
@robotnaoborot 10 ай бұрын
Yeah as many mentioned I just use loguru too. It makes it really simpler without all the boilerplate which I couldn't remember even after years of using logging
@JulienBorrel
@JulienBorrel 9 ай бұрын
Python logging is both brilliant and frighteningly complex.
@gabrielchaperon4068
@gabrielchaperon4068 11 ай бұрын
Hi! Fantastic video. What is you opinion on structlog, and how it could help avoid writing our own formatters?
@Lewstars
@Lewstars 10 ай бұрын
Hey. Really enjoyed actually understanding how logging works. I'm now a little confused about how far I need to go with logging for a somewhat basic ETL pipeline. It's not an overly complex application and doesn't have many moving parts. Based on the sample code, would '3-homework-filtered-stdout-stderr.json' be most appropriate?
@AJMansfield1
@AJMansfield1 11 ай бұрын
Typically, if I have a major class that might be used from different contexts, I'll include a formal `logger` kwarg init parameter defaulted to something like logging.getLogger("my_class"), to enable a caller to DI some other logger if they want. Then, in each major function I'll spawn a child as `logger = self.logger.getChild("my_function")`. (This is similar to my philosophy about always passing around a `now` kwarg any time I'm writing time-dependent code, to avoid whole classes of bugs linked to conditions unexpectedly becoming true in the middle of a function by upholding a sort of "fiction" that the entire code execution between two sleeps happens in a single instant.)
@PanduPoluan
@PanduPoluan 10 ай бұрын
One important thing you forgot to mention: logging.getLogger(logger_name) returns a singleton for each logger_name. The logic is kind of like: if logger_name not in dict_of_all_existing_loggers: dict_of_all_existing_loggers[logger_name] = LoggerClass() return dict_of_all_existing_loggers[logger_name] Or in other words: It's memoized This means, if you use multithreading or multiprocessing, you don't need to pass the logger instance to the worker threads/processes; rather, for each worker, have them fetch the singleton object by invoking logging.getLogger(logger_name).
@colinmoon8097
@colinmoon8097 10 ай бұрын
Your video did set me on the right course for logging but it is far cleverer than what you showed,. PS I do watch your videos on most things as they are extremely helpful.
@guidodinello1369
@guidodinello1369 11 ай бұрын
Hahaha i dont know why but the pause and face at 1:57 just cracked me up
@thisisme-u9j
@thisisme-u9j 10 ай бұрын
What about 10:30 :D
@efmece
@efmece 5 ай бұрын
Your video teach me a lot about logging in python😊. Thank you for this video!! Will you ever make of how to logging in a library?
@travelchimps6637
@travelchimps6637 9 ай бұрын
At 19.09 where is queue.handler initialised?
@MikeprodOfficial
@MikeprodOfficial 7 ай бұрын
Just discovering this, I learnt a lot from your concise video. @mCoding What about using loguru instead of the default logging ?
@alexandredamiao1365
@alexandredamiao1365 8 ай бұрын
I have learned a ton from this video and channel. Such high quality! Thank you!
@mCoding
@mCoding 8 ай бұрын
You're welcome!
@6f6e69
@6f6e69 9 ай бұрын
Pure gold. Thank you, sir!
@mCoding
@mCoding 9 ай бұрын
Much appreciated!
@ytjho
@ytjho 9 ай бұрын
That deadpan headshake at 10:31 was great 😂
@aaronm6675
@aaronm6675 11 ай бұрын
Wowwwwww, I'm immediately cloning and implementing in my app. THX🙏
@zyphtron
@zyphtron 11 ай бұрын
What are you really cloning?
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
Правильный подход к детям
00:18
Beatrise
Рет қаралды 11 МЛН
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН
My Brain after 569 Leetcode Problems
7:50
NeetCode
Рет қаралды 2,7 МЛН
Unlocking your CPU cores in Python (multiprocessing)
12:16
mCoding
Рет қаралды 311 М.
5 Good Python Habits
17:35
Indently
Рет қаралды 661 М.
Python Logging: How to Write Logs Like a Pro!
11:02
ArjanCodes
Рет қаралды 183 М.
Python Generators
15:32
mCoding
Рет қаралды 143 М.
5 Signs of an Inexperienced Self-Taught Developer (and how to fix)
8:40
Async for loops in Python
16:36
mCoding
Рет қаралды 67 М.
5 Python Libraries You Should Know in 2025!
22:30
Keith Galli
Рет қаралды 68 М.
12 Logging BEST Practices in 12 minutes
12:00
Better Stack
Рет қаралды 75 М.
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН