2012-06-19 2 views
2

Я устанавливаю файл logging.xml, как показано ниже. Этот файл включает в себя вывод на консоль, а также прокатный файл, который получает новый файл на каждый день:Как вывести имя класса в LogFramework 2 Logging?

<configuration> 
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${application.home}/logs/application.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <FileNamePattern>${application.home}/logs/application.%d{yyyy-MM-dd}.log</FileNamePattern> 
    </rollingPolicy> 

    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern> 
    </layout> 
</appender> 
<appender name="A1" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%p %d{ISO8601} %c - %m%n</pattern> 
    </encoder> 
</appender> 
<logger name="javax.faces" level="debug" /> 
<root level="info"> 
    <appender-ref ref="A1" /> 
    <appender-ref ref="FILE" /> 
</root> 
</configuration> 

Мой вопрос с этим как я вывожу название класса, а? Я пробовал читать документацию Play и не мог найти ответ на этот вопрос ... В производственной среде очень сложно не видеть классные имена. Спасибо за помощь!

+0

Не могли бы вы показать, что он сейчас выводит? –

+0

Как упоминалось в документах, выполнение этого в производственной среде может быть не очень хорошей. ** Создание информации класса вызывающего абонента не особенно быстро. Таким образом, его использование следует избегать, если скорость выполнения не является проблемой. ** – Somatik

ответ

2

Согласно doc, чтобы получить имя класса, вы должны использовать в шаблоне %class{0}

+0

Очень полезная ссылка, удивленная, я не смог найти ее самостоятельно после поиска ... – KVISH

+0

@KVISH Не могли бы вы рассказать, как вы ее работали? Я получаю это 'play.Logger $ ALogger - 2016-10-02 01: 19: 47,684 - Мой журнал приложений. Воспроизвести версию 2.2. Он печатает имя класса ALogger и использует 'private static final Logger.ALogger logger = Logger.of (MyClass.class);' даже не печатает журнал. Я не хочу добавлять каждое имя класса в logger.xml, например «" – saurabheights

+1

Этот вопрос был давным-давно, и у меня больше нет доступа к коду для этого. Кроме того, версия была 1.x игры, не уверен, если она соответствующая. – KVISH

-2

кажется проблемой в вашей частной реализации класса PatternLayout в ch.qos.logback.classic. PatternLayout. Попробуйте использовать стандартную реализацию log4j. И как вы получаете экземпляр журнала, например: private static Logger logger = Logger.getLogger (MyClass.class); ?

+0

Нет ... что функция 'getLogger' не существует в' play.Logger'. Так что я просто делаю 'Logger.info',' Logger.error' и т. Д. – KVISH

+0

Еще одна вещь ... Я использую в Play! (как упоминалось выше) ... Я бы предпочел не вводить еще одну структуру ведения журнала, поскольку инфраструктура включает уже ... было интересно, есть ли способ сделать это в текущей структуре. – KVISH

-3

Пожалуйста, внимательно прочитайте docs. Также play2 использует Logback в лесозаготовительной двигателя, так что читайте больше об этом на Logback-х official web site.

+3

Вы не отвечаете на вопрос. –

1

playframework использует SLF4J в лесозаготовительной двигателя и не печатает имя класса, даже после того, как следующее выражение:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%d{ISO8601} %-5level [%thread] %logger{36}: %class{0}::%method:%line - %msg%n</pattern> 
    </encoder> 
</appender> 

исправление однако использовать:

Logger.underlying(). Info ("My logging message");

Чтобы получить имя и метод и номер строки. Выхода:

2015-12-22 17: 43: 49969 INFO [плей-akka.actor.default-диспетчерский-30] применения: MyController :: получить: 82 - Мое протоколирование сообщения

Смежные вопросы