Если вы прямо напечатаете любой объект Person, он ClassName@HashCode
передаст код.
в вашем случае com.foo.Person@2f92e0f4
печатается. Где Person
- класс, к которому принадлежит объект, а 2f92e0f4
- hashCode объекта.
public class Person {
private String name;
public Person(String name){
this.name = name;
}
// getter/setter omitted
@override
public String toString(){
return name;
}
}
Теперь, если вы попытаетесь использовать объект Person
, он напечатает имя
Class Test
{
public static void main(String... args){
Person obj = new Person("YourName");
System.out.println(obj.toString());
}
}
Вы можете сделать форматирование самостоятельно:
logging.info('date={}'.format(date))
Как было указано Martijn Pieters, это всегда будет выполнять форматирование строк, а использование модуля протоколирования приведет к тому, что форматирование будет выполнено только в том случае, если сообщение действительно регистрируется.
Вы не можете использовать форматирование нового стиля при использовании модуля регистрации; используйте %s
вместо {}
.
logging.info('date=%s', date)
Модуль протоколирования использует оператор старого стиля %
для форматирования строки журнала. Более подробно см. Метод debug
.
Если вы действительно хотите использовать форматирование строк str.format()
, рассмотрите использование пользовательских объектов, которые применяют форматирование «поздно», когда на самом деле преобразован в строку:
class BraceMessage(object):
def __init__(self, fmt, *args, **kwargs):
self.fmt = fmt
self.args = args
self.kwargs = kwargs
def __str__(self):
return self.fmt.format(*self.args, **self.kwargs)
__ = BraceMessage
logging.info(__('date={}', date))
Это подход, который предлагает Python 3 logging
документация модуля , и также работает на Python 2.
Ответ Martijn правильный, но если вы предпочитаете использовать новое форматирование стиля с протоколированием, его можно выполнить путем подкласса Logger.
import logging
class LogRecord(logging.LogRecord):
def getMessage(self):
msg = self.msg
if self.args:
if isinstance(self.args, dict):
msg = msg.format(**self.args)
else:
msg = msg.format(*self.args)
return msg
class Logger(logging.Logger):
def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None):
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
if extra is not None:
for key in extra:
rv.__dict__[key] = extra[key]
return rv
Затем просто установите класс ведения журнала:
logging.setLoggerClass(Logger)
Вы также можете сделать это (Python 3);
logging.info(f'date={date}')