PyCharm logging output colours

2020-02-20 05:51发布

I'm using PyCharm to develop a GAE app in Mac OS X. Is there any way to display colours in the run console of PyCharm?

I've set a handler to output colours in ansi format. Then, I've added the handler:

LOG = logging.getLogger()
LOG.setLevel(logging.DEBUG)
for handler in LOG.handlers:
    LOG.removeHandler(handler)

LOG.addHandler(ColorHandler())

LOG.info('hello!')
LOG.warning('hello!')
LOG.debug('hello!')
LOG.error('hello!')

But the colour is the same.

PyCharm run console output

EDIT:

A response from JetBrains issue tracker: Change line 55 of the snippet from sys.stderr to sys.stdout. stderr stream is always colored with red color while stdout not.

Now colours are properly displayed.

7条回答
别忘想泡老子
2楼-- · 2020-02-20 06:28

PyCharm 2019.1.1 (Windows 10, 1709) - runned snippet as is - works correctly.

Bug: setFormatter - does not work.

Fix: make change in line 67 and get rid on line 70-71 (unformatted handler adding).

self.stream.write(record.msg + "\n", color)

to

self.stream.write(self.format(record) + "\n", color)

Line 70-71 can be moved under manual file run construction for save test ability:

if __name__ == "__main__":
    logging.getLogger().setLevel(logging.DEBUG)
    logging.getLogger().addHandler(ColorHandler())

    logging.debug("Some debugging output")
    logging.info("Some info output")
    logging.error("Some error output")
    logging.warning("Some warning output")

Compared it with standard StreamHandler:

import logging
import logging_colored

log_format = logging.Formatter("[%(threadName)-15.15s] [%(levelname)-5.5s]  %(message)s")
logger = logging.getLogger('Main')
logger.setLevel(logging.DEBUG)

console = logging.StreamHandler()
console.setFormatter(log_format)
logger.addHandler(console)

console = logging_colored.ColorHandler()
console.setFormatter(log_format)
logger.addHandler(console)
...

查看更多
【Aperson】
3楼-- · 2020-02-20 06:30

Sept. 2019: PyCharm Community 2019.1

PyCharm colored all the logs including info/debug in red.

Th upshot is: it is not a PyCharm problem, this is how the default logging is configured. Everything written to sys.stderr is colored red by PyCharm. When using StreamHandler() without arguments, the default stream is sys.stderr.

For getting non-colored logs back, specify logging.StreamHandler(stream=sys.stdout) in basic config like this:

logging.basicConfig(
    level=logging.DEBUG,
    format='[%(levelname)8s]:  %(message)s',
    handlers=[
        logging.FileHandler(f'{os.path.basename(__file__)}.log'),
        logging.StreamHandler(sys.stdout),
    ])

or be more verbose:

logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

This fixed my red PyCharm logs.

查看更多
太酷不给撩
4楼-- · 2020-02-20 06:32

Late to the party, but anyone else with this issue, here's the solution that worked for me:

import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

This came from this answer

查看更多
一夜七次
5楼-- · 2020-02-20 06:39

As of at least PyCharm 2017.2 you can do this by enabling:

Run | Edit Configurations... | Configuration | Emulate terminal in output console

Run configuration

enter image description here

查看更多
孤傲高冷的网名
6楼-- · 2020-02-20 06:44

What solved it for me (on PyCharm 2017.2) was going to Preferences -> Editor -> Color Scheme -> Console Colors and changing the color of Console -> Error output. Of course this also changes the error color but at least you don't see red all the time...

查看更多
Lonely孤独者°
7楼-- · 2020-02-20 06:45

PyCharm doesn't support that feature natively, however you can download the Grep Console plugin and set the colors as you like.

Here's a screenshot: http://plugins.jetbrains.com/files/7125/screenshot_14104.png (link is dead)

I hope it helps somewhat :) although it doesn't provide fully colorized console, but it's a step towards it.

查看更多
登录 后发表回答