2013-07-29 147 views
4

我試圖設置一個記錄器格式化程序,它可以在顯示消息之前去除所有前導'\ n'或'\ t'字符。從Python記錄器消息中剝離換行符和空格

有沒有辦法通過設置記錄器過濾器來做到這一點?

編輯:我明白我應該str.strip(),但我怎麼能整合這與記錄每個消息?

這是我記錄設置的例子:

def initialize_logging(log_dir='Logs', log_name='log.log', 
        console_level='INFO', file_level='DEBUG'): 
    start_time = datetime.datetime.now() 
    start_time_string= start_time.strftime("%m-%d-%y_%Hh%Mm%Ss") 

    if file_level == "DEBUG": 
     level = logging.DEBUG 
    elif file_level == "INFO": 
     level = logging.INFO 
    elif file_level == "WARNING": 
     level = logging.WARNING 
    elif file_level == "ERROR": 
     level = logging.ERROR 
    elif file_level == "CRITICAL": 
     level = logging.CRITICAL 
    else: 
     level = logging.INFO 

    log = logging.getLogger() 
    log.setLevel(level) 

    #create a log formatter 
    formatter = logging.Formatter('%(asctime)s %(name)-24s: %(levelname)-8s: %(message)s','%m-%d-%y %H:%M:%S') 

    #create log handlers 

    #console handler 
    console = logging.StreamHandler() 
    if console_level == "DEBUG": 
     console.setLevel(logging.DEBUG) 
    elif console_level == "INFO": 
     console.setLevel(logging.INFO) 
    elif console_level == "WARNING": 
     console.setLevel(logging.WARNING) 
    elif console_level == "ERROR": 
     console.setLevel(logging.ERROR) 
    elif console_level == "CRITICAL": 
     console.setLevel(logging.CRITICAL) 
    else: 
     console.setLevel(logging.INFO) 
    console.setFormatter(formatter) 
    log.addHandler(console) 

    log_path = str(os.getcwd()) + '/Logs/' 
    if not os.path.exists(log_path): 
     os.makedirs(log_path) 

    log_file_name = 'last.log' 
    log_file = os.path.join(log_path, log_file_name) 

    logfile = logging.FileHandler(log_file, "w") 
    if file_level == "DEBUG": 
     logfile.setLevel(logging.DEBUG) 
    elif file_level == "INFO": 
     logfile.setLevel(logging.INFO) 
    elif file_level == "WARNING": 
     logfile.setLevel(logging.WARNING) 
    elif file_level == "ERROR": 
     logfile.setLevel(logging.ERROR) 
    elif file_level == "CRITICAL": 
     logfile.setLevel(logging.CRITICAL) 
    else: 
     logfile.setLevel(logging.INFO) 

    logfile.setFormatter(formatter) 
    log.addHandler(logfile) 

    return log #return a path to the log file 
+1

格式化行看起來像你的日誌信息的重要組成部分。嘗試formatter = logging.Formatter('%(asctime)s%(name)-24s:%(levelname)-8s:%(message)s','%m-%d-%y%H:%M:% S')。strip() – MonkeyWrench

回答

0

使用str.strip()方法:

>>> s= "\n\rrohit\n" 
>>> s.strip() 
'rohit' 
+1

我怎樣才能將這與記錄器集成到每條消息中? –

+0

你可能想發佈你的記錄器的一些示例代碼,如果你想要如何使用你當前的代碼實現它的建議.. – AWainb

+0

對不起,我的代碼添加的例子 –

0
def logger(my_str): 
    s = my_str.strip() 
    print s 

logger("\n\ttest") 

從文檔:

string.strip(s[, chars]) 

Return a copy of the string with leading and trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the both ends of the string this method is called on.

4

因爲你正在修改的輸入消息本身,你需要繼承logging.Formatter

class WhitespaceRemovingFormatter(logging.Formatter): 
    def format(self, record): 
     record.msg = record.msg.strip() 
     return super(WhitespaceRemovingFormatter, self).format(record)