PyCharm logging output colours

后端 未结 7 619
情话喂你
情话喂你 2020-12-24 11:05

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

相关标签:
7条回答
  • 2020-12-24 11:18

    I discovered the following solution. Apparently Pycharm redirects sys.stdout. From the sys module documentation:

    sys.__stdin__
    sys.__stdout__
    sys.__stderr__
    

    These objects contain the original values of stdin, stderr and stdout at the start of the program. They are used during finalization, and could be useful to print to the actual standard stream no matter if the sys.std* object has been redirected.

    It can also be used to restore the actual files to known working file objects in case they have been overwritten with a broken object. However, the preferred way to do this is to explicitly save the previous stream before replacing it, and restore the saved object.

    Therefore, to solve this issue you can redirect output to sys.__stdout__. Example configuration from my log_config.yml:

    console:
      class: logging.StreamHandler
      level: DEBUG
      stream: "ext://sys.__stdout__"
      formatter: colorFormatter
    
    0 讨论(0)
  • 2020-12-24 11:22

    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

    0 讨论(0)
  • 2020-12-24 11:24

    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.

    0 讨论(0)
  • 2020-12-24 11:25

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

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

    0 讨论(0)
  • 2020-12-24 11:29

    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)
    ...
    

    0 讨论(0)
  • 2020-12-24 11:32

    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.

    0 讨论(0)
提交回复
热议问题