2014-04-15 12 views
14

Domyślnie koder Logback wykorzystuje standard date format podobny do standardu ISO 8601. Ale brakuje "T" w środku między porą dnia i godziny. Model T ułatwia przetwarzanie i jest wymagany przez standard (chyba, że ​​strony prywatne uzgodnią inaczej).Funkcja Logback zawiera "T" między datą i godziną w formacie "% daty" dla ścisłej zgodności z ISO 8601

Czy istnieje pewna sztuczka, aby uzyskać logback, aby dołączyć T?

To ...

2006-10-20T14:06:49,812 

zamiast tego ...

2006-10-20 14:06:49,812 

Przypuszczam, że mógł odtworzyć całą formatu dodając „T”, ale zastanawiam się, czy istnieje jakiś prostszy sposób .

Odpowiedz

29

Report Bug

Jest raport o błędzie o tym na Logback's JIRA page. Od czasu 24/Feb/10 3:57 PM nie było dużo rozwoju. Właśnie głosowałem, by zwrócić na siebie uwagę. Ty też powinieneś.

Podałbym własny format daty zgodny z ISO 8601.

Insert "T"

To powinno załatwić sprawę:

<pattern>%d{"yyyy-MM-dd'T'HH:mm:ss,SSS"} [%thread] %-5level %logger{35} - %msg %n 
</pattern> 

"" są potrzebne, aby uczynić pracę , jak opisano w documentation.

Ten element <pattern> należy do ustawień konfiguracji logowania. Oto przykład logback.xml file:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <!-- Strangely, Logback lacks a built-in formatter for ISO 8601. So, roll our own. --> 
      <Pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} [%thread] %-5level %logger{36} - %msg%n</Pattern> 
     </layout> 
    </appender> 

    <logger name="com.example" level="TRACE"/> 


    <root level="debug"> 
     <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

Strefa czasowa

Aby być bardziej w pełni zgodny z ISO 8601, a dla bardziej pomocny logowania, należy uwzględnić strefę czasową.

EDYCJA (Michael-O, 2014-06-15): To jest nie prawda, strefa czasowa jest absolutna opcjonalne.

Aby uwzględnić strefę czasową, należy podać drugi argument (see doc) do %date. Przekaż proper name of a time zone. Unikaj kodów strefy czasowej trzech lub czterech liter, takich jak "EST", ponieważ nie są one ani unikalne, ani wystandaryzowane. Na przykład podaj Australia/Perth. Zwykle dla rejestrowania chcemy mieć czas UTC (GMT), czyli bez żadnego offsetu. W takim przypadku należy podać UTC.

Można wyświetlić przesunięcie strefy czasowej jako liczbę godzin i minut jako część daty i godziny w dzienniku. Dołącz wartość X, aby wyświetlić przesunięcie strefy czasowej jako część wartości daty.

To ...

%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} 

... produkuje ...

2014-04-16T09:59:24,009Z 

W XXX prace w Java 7 i 8. W starszych wersjach Java, może być w stanie używać Z w definicji formatu do generowania numeru offsetowego bez dwukropka.

+0

@Basil Nie mam, pozwól mi spróbować i wrócić do Ciebie. –

+0

@basil Masz na myśli randkę lub całą sprawę? –

+0

Pełna sprawa. Nie jestem pewna sekwencji ucieczki dla zakodowanych ciągów 'T', które sprawiają, że Logback jest szczęśliwy. Wszystko jest pomocne, ponieważ docinek Logback nie jest dla nas łagodny. –