|
54 | 54 |
|
55 | 55 | <body>
|
56 | 56 | <header>
|
57 |
| - <aside>August 18, 2024</aside> |
| 57 | + <aside>August 19, 2024</aside> |
58 | 58 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a>
|
59 | 59 | </header>
|
60 | 60 |
|
@@ -1834,48 +1834,48 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment
|
1834 | 1834 | <span class="hljs-string">'README.md is a readme file that belongs to user gto.'</span>
|
1835 | 1835 | </code></pre></div>
|
1836 | 1836 |
|
1837 |
| -<div><h2 id="logging"><a href="#logging" name="logging">#</a>Logging</h2><pre><code class="python language-python hljs"><span class="hljs-keyword">import</span> logging |
| 1837 | +<div><h2 id="logging"><a href="#logging" name="logging">#</a>Logging</h2><pre><code class="python language-python hljs"><span class="hljs-keyword">import</span> logging <span class="hljs-keyword">as</span> log |
1838 | 1838 | </code></pre></div>
|
1839 | 1839 |
|
1840 |
| -<pre><code class="python language-python hljs">logging.basicConfig(filename=<path>, level=<span class="hljs-string">'DEBUG'</span>) <span class="hljs-comment"># Configures the root logger (see Setup).</span> |
1841 |
| -logging.debug/info/warning/error/critical(<str>) <span class="hljs-comment"># Logs to the root logger.</span> |
1842 |
| -<Logger> = logging.getLogger(__name__) <span class="hljs-comment"># Logger named after the module.</span> |
1843 |
| -<Logger>.<level>(<str>) <span class="hljs-comment"># Logs to the logger.</span> |
1844 |
| -<Logger>.exception(<str>) <span class="hljs-comment"># Error() that appends caught exception.</span> |
| 1840 | +<pre><code class="python language-python hljs">log.basicConfig(filename=<path>, level=<span class="hljs-string">'DEBUG'</span>) <span class="hljs-comment"># Configures the root logger (see Setup).</span> |
| 1841 | +log.debug/info/warning/error/critical(<str>) <span class="hljs-comment"># Logs to the root logger.</span> |
| 1842 | +<Logger> = log.getLogger(__name__) <span class="hljs-comment"># Logger named after the module.</span> |
| 1843 | +<Logger>.<level>(<str>) <span class="hljs-comment"># Logs to the logger.</span> |
| 1844 | +<Logger>.exception(<str>) <span class="hljs-comment"># Error() that appends caught exception.</span> |
1845 | 1845 | </code></pre>
|
1846 |
| -<div><h3 id="setup">Setup</h3><pre><code class="python language-python hljs">logging.basicConfig( |
1847 |
| - filename=<span class="hljs-keyword">None</span>, <span class="hljs-comment"># Logs to stderr or appends to file.</span> |
1848 |
| - format=<span class="hljs-string">'%(levelname)s:%(name)s:%(message)s'</span>, <span class="hljs-comment"># Add '%(asctime)s' for local datetime.</span> |
1849 |
| - level=logging.WARNING, <span class="hljs-comment"># Drops messages with lower priority.</span> |
1850 |
| - handlers=[logging.StreamHandler(sys.stderr)] <span class="hljs-comment"># Uses FileHandler if filename is set.</span> |
| 1846 | +<div><h3 id="setup">Setup</h3><pre><code class="python language-python hljs">log.basicConfig( |
| 1847 | + filename=<span class="hljs-keyword">None</span>, <span class="hljs-comment"># Logs to stderr or appends to file.</span> |
| 1848 | + format=<span class="hljs-string">'%(levelname)s:%(name)s:%(message)s'</span>, <span class="hljs-comment"># Add '%(asctime)s' for local datetime.</span> |
| 1849 | + level=log.WARNING, <span class="hljs-comment"># Drops messages with lower priority.</span> |
| 1850 | + handlers=[log.StreamHandler(sys.stderr)] <span class="hljs-comment"># Uses FileHandler if filename is set.</span> |
1851 | 1851 | )
|
1852 | 1852 | </code></pre></div>
|
1853 | 1853 |
|
1854 |
| -<pre><code class="python language-python hljs"><Formatter> = logging.Formatter(<span class="hljs-string">'<format>'</span>) <span class="hljs-comment"># Creates a Formatter.</span> |
1855 |
| -<Handler> = logging.FileHandler(<path>, mode=<span class="hljs-string">'a'</span>) <span class="hljs-comment"># Creates a Handler. Also `encoding=None`.</span> |
1856 |
| -<Handler>.setFormatter(<Formatter>) <span class="hljs-comment"># Adds Formatter to the Handler.</span> |
1857 |
| -<Handler>.setLevel(<int/str>) <span class="hljs-comment"># Processes all messages by default.</span> |
1858 |
| -<Logger>.addHandler(<Handler>) <span class="hljs-comment"># Adds Handler to the Logger.</span> |
1859 |
| -<Logger>.setLevel(<int/str>) <span class="hljs-comment"># What is sent to its/ancestors' handlers.</span> |
1860 |
| -<Logger>.propagate = <bool> <span class="hljs-comment"># Cuts off ancestors' handlers if False.</span> |
| 1854 | +<pre><code class="python language-python hljs"><Formatter> = log.Formatter(<span class="hljs-string">'<format>'</span>) <span class="hljs-comment"># Creates a Formatter.</span> |
| 1855 | +<Handler> = log.FileHandler(<path>, mode=<span class="hljs-string">'a'</span>) <span class="hljs-comment"># Creates a Handler. Also `encoding=None`.</span> |
| 1856 | +<Handler>.setFormatter(<Formatter>) <span class="hljs-comment"># Adds Formatter to the Handler.</span> |
| 1857 | +<Handler>.setLevel(<int/str>) <span class="hljs-comment"># Processes all messages by default.</span> |
| 1858 | +<Logger>.addHandler(<Handler>) <span class="hljs-comment"># Adds Handler to the Logger.</span> |
| 1859 | +<Logger>.setLevel(<int/str>) <span class="hljs-comment"># What is sent to its/ancestors' handlers.</span> |
| 1860 | +<Logger>.propagate = <bool> <span class="hljs-comment"># Cuts off ancestors' handlers if False.</span> |
1861 | 1861 | </code></pre>
|
1862 | 1862 | <ul>
|
1863 | 1863 | <li><strong>Parent logger can be specified by naming the child logger <code class="python hljs"><span class="hljs-string">'<parent>.<name>'</span></code>.</strong></li>
|
1864 | 1864 | <li><strong>If logger doesn't have a set level it inherits it from the first ancestor that does.</strong></li>
|
1865 | 1865 | <li><strong>Formatter also accepts: pathname, filename, funcName, lineno, thread and process.</strong></li>
|
1866 | 1866 | <li><strong>A <code class="python hljs"><span class="hljs-string">'handlers.RotatingFileHandler'</span></code> creates and deletes log files based on 'maxBytes' and 'backupCount' arguments.</strong></li>
|
1867 | 1867 | </ul>
|
1868 |
| -<div><h4 id="createsaloggerthatwritesallmessagestofileandsendsthemtotherootshandlerthatprintswarningsorhigher">Creates a logger that writes all messages to file and sends them to the root's handler that prints warnings or higher:</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>logger = logging.getLogger(<span class="hljs-string">'my_module'</span>) |
1869 |
| -<span class="hljs-meta">>>> </span>handler = logging.FileHandler(<span class="hljs-string">'test.log'</span>, encoding=<span class="hljs-string">'utf-8'</span>) |
1870 |
| -<span class="hljs-meta">>>> </span>handler.setFormatter(logging.Formatter(<span class="hljs-string">'%(asctime)s %(levelname)s:%(name)s:%(message)s'</span>)) |
| 1868 | +<div><h4 id="createsaloggerthatwritesallmessagestofileandsendsthemtotherootshandlerthatprintswarningsorhigher">Creates a logger that writes all messages to file and sends them to the root's handler that prints warnings or higher:</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>logger = log.getLogger(<span class="hljs-string">'my_module'</span>) |
| 1869 | +<span class="hljs-meta">>>> </span>handler = log.FileHandler(<span class="hljs-string">'test.log'</span>, encoding=<span class="hljs-string">'utf-8'</span>) |
| 1870 | +<span class="hljs-meta">>>> </span>handler.setFormatter(log.Formatter(<span class="hljs-string">'%(asctime)s %(levelname)s:%(name)s:%(message)s'</span>)) |
1871 | 1871 | <span class="hljs-meta">>>> </span>logger.addHandler(handler)
|
1872 | 1872 | <span class="hljs-meta">>>> </span>logger.setLevel(<span class="hljs-string">'DEBUG'</span>)
|
1873 |
| -<span class="hljs-meta">>>> </span>logging.basicConfig() |
1874 |
| -<span class="hljs-meta">>>> </span>logging.root.handlers[<span class="hljs-number">0</span>].setLevel(<span class="hljs-string">'WARNING'</span>) |
| 1873 | +<span class="hljs-meta">>>> </span>log.basicConfig() |
| 1874 | +<span class="hljs-meta">>>> </span>log.root.handlers[<span class="hljs-number">0</span>].setLevel(<span class="hljs-string">'WARNING'</span>) |
1875 | 1875 | <span class="hljs-meta">>>> </span>logger.critical(<span class="hljs-string">'Running out of disk space.'</span>)
|
1876 | 1876 | CRITICAL:my_module:Running out of disk space.
|
1877 | 1877 | <span class="hljs-meta">>>> </span>print(open(<span class="hljs-string">'test.log'</span>).read())
|
1878 |
| -2023-02-07 23:21:01,430 CRITICAL:my_module:Running out of disk space. |
| 1878 | +<span class="hljs-number">2023</span><span class="hljs-number">-02</span><span class="hljs-number">-07</span> <span class="hljs-number">23</span>:<span class="hljs-number">21</span>:<span class="hljs-number">01</span>,<span class="hljs-number">430</span> CRITICAL:my_module:Running out of disk space. |
1879 | 1879 | </code></pre></div>
|
1880 | 1880 |
|
1881 | 1881 | <div><h2 id="introspection"><a href="#introspection" name="introspection">#</a>Introspection</h2><pre><code class="python language-python hljs"><list> = dir() <span class="hljs-comment"># Names of local vars, functions, classes and modules.</span>
|
@@ -2932,7 +2932,7 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment
|
2932 | 2932 |
|
2933 | 2933 |
|
2934 | 2934 | <footer>
|
2935 |
| - <aside>August 18, 2024</aside> |
| 2935 | + <aside>August 19, 2024</aside> |
2936 | 2936 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a>
|
2937 | 2937 | </footer>
|
2938 | 2938 |
|
|
0 commit comments