2014-02-19 4 views
31

меня последовавшей импорт:Где сохраняется файл журнала slf4j?

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

и следующее: инстанцирование

private static Logger logger = LoggerFactory.getLogger(Test.class); 

и следующее в моем главном методе:

logger.info("SOME MESSAGE: "); 

Однако, я не в состоянии найти выход в любом месте. Все, что я вижу, это то, что в моей консоли есть:

21:21:24.235 [main] INFO some_folder.Test - SOME MESSAGE: 

Как найти файл журнала?

Обратите внимание, что следующие на моем пути построения:

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.4.jar

Я прочитал ответ на подобные вопросы, но на самом деле никто не говорит, как решить эту проблему.

+2

SLF4J является только API. У вас должна быть конкретная реализация (например, log4j). Эта конкретная реализация имеет конфигурационный файл, который сообщает вам, где хранить журналы. –

+1

@ArnaudDenoyelle Он строит с slf4j-log4j12-1.6.4.jar, что означает, что он включает в себя реализацию. – jmkgreen

ответ

1

По умолчанию оно не записывается в файл. Вам нужно настроить что-то вроде RollingFileAppender и записать в него корневой журнал (возможно, в дополнение к умолчанию ConsoleAppender).

+0

Предполагая, что OP использует log4j –

+0

@CeilingGecko См. Мой другой комментарий - он уже утверждает, что он включает log4j. – jmkgreen

28

slf4j - это только API. У вас должна быть конкретная реализация (например, log4j). Эта конкретная реализация имеет конфигурационный файл, который сообщает вам, где хранить журналы.

enter image description here

Когда SLF4J ловит лог сообщений с регистратором, он отдается Appender, который решает, что делать с сообщением. По умолчанию ConsoleAppender отображает сообщение в консоли.

файл конфигурации по умолчанию:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 

    <Appenders> 
    <!-- By default => console --> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </Appenders> 

    <Loggers> 
    <Root level="error"> 
     <AppenderRef ref="Console"/> 
    </Root> 
    </Loggers> 
</Configuration> 

Если поместить файл конфигурации, доступную в пути к классам, то ваш конкретной реализации (в вашем случае, log4j) будет находить и использовать его. См Log4J documentation.

Пример файла Appender:

<Appenders> 
<File name="File" fileName="${filename}"> 
    <PatternLayout> 
    <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
    </PatternLayout> 
</File> 

... 
</Appenders> 

Полный пример с файлом Appender:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 

    <Appenders> 
    <File name="File" fileName="${filename}"> 
     <PatternLayout> 
     <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
    </File> 
    </Appenders> 

    <Loggers> 
    <Root level="error"> 
     <AppenderRef ref="File"/> 
    </Root> 
    </Loggers> 

</Configuration> 
+0

У меня log4j на моем пути сборки, не так ли? – user2763361

+0

@ user2763361 Затем вы должны поместить файл конфигурации log4j в свой путь к классам, и log4j будет использовать его. –

+0

Что мне нужно, чтобы вызвать этот файл конфигурации, чтобы найти его? – user2763361

18

Как уже упоминалось, его просто фасад, и это помогает переключаться между различными реализации регистратора легко. Например, если вы хотите использовать реализацию log4j.

Образец кода будет выглядеть ниже.

Если вы используете Maven получить зависимости

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.5</version> 
    </dependency> 

Есть ниже в log4j.properties в месте SRC/главная/ресурсы/log4j.свойства

  log4j.rootLogger=DEBUG, STDOUT, file 

      log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender 
      log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 
      log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

      log4j.appender.file=org.apache.log4j.RollingFileAppender 
      log4j.appender.file.File=mylogs.log 
      log4j.appender.file.layout=org.apache.log4j.PatternLayout 
      log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n 

Hello world code below будет печатать на консоль и в файл журнала в соответствии с приведенной выше конфигурацией.

  import org.slf4j.Logger; 
      import org.slf4j.LoggerFactory; 

      public class HelloWorld { 
       public static void main(String[] args) { 
       Logger logger = LoggerFactory.getLogger(HelloWorld.class); 
       logger.info("Hello World"); 
       } 
      } 

enter image description here

+0

Должен ли я поместить его в 'src/main/resources'? Потому что у меня нет 'main' в качестве подпапки к' src'. Поэтому я просто положил его в 'src'. Затем я переписал ваш 'mylogs.log' в'/home/user/workspace/project/src/mylogs.log', затем запустил 'HelloWorld', и он не выводил файл журнала в нужном месте. (Нет сообщения об ошибке, просто нет вывода) – user2763361

+0

Да, если в его проекте maven у вас будут созданы папки автоматически/src/main/resources /. См. Снимок экрана выше. – Jay

+0

Это не проект Maven, поэтому я только поместил его в 'src'. – user2763361

0

Файл журнала не виден, поскольку местоположение файла конфигурации SLF4J должен передается команде Java запуска, используя следующие аргументы. (Например)

-Dlogging.config = { file_location} \ log4j2.xml

-Dlog4j.configurationFile = {file_location} \ log4j2.xml

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