Как я могу подавить новую строку в модуле протоколирования Python.

Я хотел бы отменить новую строку, например, log.info («msg»). Когда мы «печатаем» это просто

print msg, 

Поэтому мне нужно что-то вроде комы для регистрации.

Я сеял этот вопрос. Подавить новую строку в модуле регистрации Python, но кто-нибудь может дать мне ссылку или простой пример вроде «Hello world» Спасибо!

2 Solutions collect form web for “Как я могу подавить новую строку в модуле протоколирования Python.”

Это невозможно (без серьезного взлома в модуль регистрации). Если у вас должна быть эта функциональность, создайте строку журнала по частям и запишите ее, когда вы будете готовы отображать сообщение журнала с новой строкой.

Вот что я ответил на аналогичный вопрос :

Новая строка, \n , вставлена ​​внутри StreamHandler emit(...) метода StreamHandler .

Если вы действительно настроены на исправление этого поведения, то вот пример того, как я решил это, обезьяной, исправляющей метод emit emit(self, record) внутри класса logging.StreamHandler.

Патч обезьяны – это способ продления или изменения кода времени выполнения динамических языков без изменения исходного исходного кода. Этот процесс также был назван перфорированием утки.

Вот пользовательская реализация emit() которая пропускает разрывы строк:

 def customEmit(self, record): # Monkey patch Emit function to avoid new lines between records try: msg = self.format(record) if not hasattr(types, "UnicodeType"): #if no unicode support... self.stream.write(msg) else: try: if getattr(self.stream, 'encoding', None) is not None: self.stream.write(msg.encode(self.stream.encoding)) else: self.stream.write(msg) except UnicodeError: self.stream.write(msg.encode("UTF-8")) self.flush() except (KeyboardInterrupt, SystemExit): raise except: self.handleError(record) 

Затем вы TimedRotatingFileHandler пользовательский класс ведения журнала (в данном случае, подклассом из TimedRotatingFileHandler ).

 class SniffLogHandler(TimedRotatingFileHandler): def __init__(self, filename, when, interval, backupCount=0, encoding=None, delay=0, utc=0): # Monkey patch 'emit' method setattr(StreamHandler, StreamHandler.emit.__name__, customEmit) TimedRotatingFileHandler.__init__(self, filename, when, interval, backupCount, encoding, delay, utc) 

Некоторые люди могут утверждать, что этот тип решения не является Pythonic , или что-то еще. Это может быть так, так что будьте осторожны.

Кроме того, имейте в SteamHandler.emit(...) что это будет глобально исправлять SteamHandler.emit(...) , поэтому, если вы используете несколько классов журналов, этот патч также повлияет на другие классы ведения журнала!

Надеюсь, это поможет.

Python - лучший язык программирования в мире.