2012-06-19 12 views
44

Chcę użyć danych wyjściowych pprint, aby pokazać złożoną strukturę danych, ale chciałbym ją wyprowadzić przy użyciu modułu rejestrowania zamiast standardowego.Użyj rejestrowania wydrukuj dane wyjściowe pprint

ds = [{'hello': 'there'}] 
logging.debug(pprint.pprint(ds)) # outputs as STDOUT 
+5

Proszę przeszkadza czytać dokumenty przed zadając takie pytania. To jest tutaj. Ponadto powinieneś zaakceptować więcej odpowiedzi. –

+0

Przeanalizowałem dokumenty i odnalazłem 'pprint ({}, stream)', ale stwierdziłem, że jest raczej niezręczny. pomyślałbym, że coś takiego jak "spprint" mogłoby być ładniejsze niż 'pformat' (jak w' c'). – yee379

+3

'pprint.pformat()' było na tej stronie. –

Odpowiedz

93

Użyj pprint.pformat, aby uzyskać ciąg znaków, a następnie wysłać go do swojej struktury logowania.

from pprint import pprint, pformat 
ds = [{'hello': 'there'}] 
logging.debug(pformat(ds)) 
+0

dzięki za szybką odpowiedź! – yee379

+4

Jeśli nie usuniesz tego kodu po zakończeniu debugowania, prawdopodobnie powinieneś go zabezpieczyć za pomocą "jeśli Logger.isEnabledFor (logging.DEBUG):", aby uniknąć uruchamiania pformat, gdy nie będziesz używać jego danych wyjściowych: http://docs.python.org/2/library/logging.html#logging.Logger.isEnabledFor –

+0

@EdBrannin Czy pformat dodaje tyle narzutów, że warto dodać warunki do wszystkich instrukcji dziennika DEBUG? – undefinedvariable

9

Rozwiązanie powyżej nie dość wyciąć go dla mnie, ponieważ jestem również za pomocą formatowania, aby dodać nazwę i levelName po zalogowaniu. To wygląda trochę zaniedbany:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
'bbbbbbbbbbbbbbbbbbbb', 
'cccccccccccccccccccc', 
'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 

Nie może być bardziej eleganckie rozwiązanie, ale w ten sposób:

for line in pprint.pformat(ds).split('\n'): 
    logging.debug(line) 

produkuje coś trochę ładniejszy:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb', 
__main__ : DEBUG : 'cccccccccccccccccccc', 
__main__ : DEBUG : 'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 
+4

Ładniejsze do spożycia przez ludzi.Nie takie wspaniałe, jeśli przesyłasz logi do logstash lub podobnych narzędzi i chcesz pojedyncza wiadomość wielowierszowa, która ma zostać wysłana jako, no, jedna wiadomość: –

+0

czy istnieje sposób na ładny wydruk na poziomie programu obsługi lub formatera konfiguracji rejestratora? Wydaje się, że jest to prawidłowy przypadek użycia, aby uzyskać ładny wydruk na konsoli, ale przejść do formatu niesformatowanego –

Powiązane problemy