记录器的奇怪行为

时间:2016-02-25 02:41:51

标签: python logging gunicorn

我遇到了这样的问题,无法解决。我使用python的记录器来记录信息,记录器级别设置为logging.DEBUG。我用gunicorn登录 信息同时。通常,错误消息将发送到python的记录器,并且logger.info或logger.debug写入的链接消息和其他消息将转到gunicorn的日志文件。然而,对于一个应用程序,它不会表现如此。 logger.info输出的消息也会转到python的记录器。问题是,我只想在python的记录器中看到错误消息,所有其他消息都可以从gunicorn的记录器中看到。谁能给我一个线索,在这种情况下我可能会做错?

提前thx, 亚历

以下是我的配置:

LOGGER_LEVEL = logging.DEBUG  
LOGGER_ROOT_NAME = "root"  
LOGGER_ROOT_HANLDERS = [logging.StreamHandler, logging.FileHandler]  
LOGGER_ROOT_LEVEL = LOGGER_LEVEL  
LOGGER_ROOT_FORMAT = "[%(asctime)s %(levelname)s %(name)s %(funcName)s:%(lineno)d] %(message)s"  
LOGGER_LEVEL = logging.ERROR  
LOGGER_FILE_PATH = "/data/log/web/"  

代码:

def config_root_logger(self):
    formatter = logging.Formatter(self.config.LOGGER_ROOT_FORMAT)

    logger = logging.getLogger()
    logger.setLevel(self.config.LOGGER_ROOT_LEVEL)

    filename = os.path.join(self.config.LOGGER_FILE_PATH, "secondordersrv.log")
    handler = logging.FileHandler(filename)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # 测试环境配置再增加console的日志记录
    self._add_test_handler(logger, formatter)

def _add_test_handler(self, logger, formatter):
    # 测试环境配置再增加console的日志记录
    if self.config.RUN_MODE == 'test':
        handler = logging.StreamHandler()
        handler.setFormatter(formatter)
        logger.addHandler(handler)

我的gunicorn配置看起来像这样:

errorlog = '/data/log/web/%s.log' % APP_NAME  
loglevel = 'info'  
accesslog = '-'

1 个答案:

答案 0 :(得分:0)

您没有设置处理程序的级别。

public class TokenIter implements Iterator<String> { ArrayList<String> token = new ArrayList<String>(); static int count = 0; // input line to be tokenized private String line; // the next Token, null if no next Token private String nextToken; // implement public TokenIter(String line) { this.line = line; } @Override // implement public boolean hasNext() { // System.out.println(count); return count < line.length(); } @Override // implement public String next() { while (hasNext()) { char c = line.charAt(count); if (c == '!' || c == '!' || c == '^' || c == '(' || c == ')') { token.add(Character.toString(c)); count++; nextToken = Character.toString(c); return nextToken; } else if (c == 't' || c == 'T') { count++; c = line.charAt(count); if (c == 'r') { count++; c = line.charAt(count); } if (c == 'u') { count++; c = line.charAt(count); } if (c == 'e') { count++; c = line.charAt(count); }if (c == ' ' || c == '!' || c == '!' || c == '^' || c == '(' || c == ')'){ token.add("true"); nextToken = "true"; //count++; return nextToken; } } else if (c == 'f' || c == 'F') { count++; c = line.charAt(count); if (c == 'a') { count++; c = line.charAt(count); } if (c == 'l') { count++; c = line.charAt(count); } if (c == 's') { count++; c = line.charAt(count); } if (c == 'e') { count++; c = line.charAt(count); } if (c == ' ' || c == '!' || c == '!' || c == '^' || c == '(' || c == ')'){ token.add("false"); nextToken = "false"; // count++; return nextToken; } } else if (c == ' ') { count++; } else { count++; } } return nextToken; } @Override // provided, do not change public void remove() { // TODO Auto-generated method stub throw new UnsupportedOperationException(); } // provided public static void main(String[] args) { String line; // you can play with other inputs on the command line if (args.length > 0) line = args[0]; // or do the standard test else line = " ! BAD (true ^ false) % truelybad"; System.out.println("line: [" + line + "]"); TokenIter tokIt = new TokenIter(line); while (tokIt.hasNext()) System.out.println("next token: [" + tokIt.next() + "]"); } 之后,添加以下行:

handler.setFormatter(formatter)