log4j - вывести на консоль, но не в файл - PullRequest
4 голосов
/ 04 февраля 2012

Я использую этот файл log4j.properties:

log4j.rootLogger=ALL,console

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d %p %t %c - %m%n

log4j.appender.A=org.apache.log4j.RollingFileAppender 
log4j.appender.A.File=log/LotteryLogger.log 
log4j.appender.A.MaxFileSize=2MB
log4j.appender.A.MaxBackupIndex=3
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d %p %t %c - %m%n
log4j.category.com.test.controller=INFO,A

В моем TestController у меня есть

private Logger logger = Logger.getLogger(TestController.class);

Почему невозможно распечатать в файл?

Кстати, это веб-приложение, когда я попробовал это на простом автономном приложении, оно отлично работало.

Ответы [ 4 ]

1 голос
/ 25 октября 2012

Я выполнил следующие шаги, и это сработало для меня:

1) Поместите файл ur log4j.properties в следующее: WEB-INF / classes

2) Поместите log4jXXX.jarфайл в папке lib приложения в папке WEB-INF.Если мы не выполним этот шаг, он подберет файл jar, уже находящийся на сервере jboss, и будет работать с существующими настройками журналов JBOSS, упомянутыми в jboss-log4j.xml

Пожалуйста, попробуйте, если это разрешит вашу проблему.1007 *

Спасибо

Анкит Адлаха

1 голос
/ 06 августа 2014

Вы пробовали log4j.rootLogger=ALL,console,A? Я думаю, что A отсутствует в первой строке. Я добавляю файл примера, который я использую.

log4j.rootLogger = DEBUG, stdout, stderr, dailyfile

log4j.appender.stdout.Threshold = INFO
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %5p %m (%C::%M:%L)%n

log4j.appender.stderr.Threshold = ERROR
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=[%d] %5p %m (%C::%M:%L)%n

log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = ./log/Torpedo.log
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=[%d] %5p {%t} %m (%C::%M:%L)%n

log4j.appender.dailyfile.DatePattern ='.'yyyy-MM-dd
1 голос
/ 04 февраля 2012

Если вы говорите, что он хорошо работает в вашей IDE и что он не работает как веб-приложение, возможно, вы помещаете файл log4j.properties в неправильное местоположение.

При запуске вашегоприложение из командной строки вы, скорее всего, передаете ему аргумент JVM: log4j.configuration = / path / to / my / file / log4j.properties

В контексте веб-приложения контейнер сервлета будет отвечать зазагрузка конфигурации log4j.Обычно это делается путем загрузки файла log4j.properties/xml, который находится в WEB-INF / classes

Другой вариант - добавить его в переменную среды CATALINA_OPS. Вы можете посмотреть здесь

EDIT : если вы уверены, что права доступа к файлам в порядке и оба файла действительно загружены, я бы предложил запустить log4j в режиме отладки, в этом режиме log4j выведетвнутренние сообщения, например, какой файл он загружает и какие приложения настраиваются.это ваш лучший выбор при отладке.

Чтобы использовать log4j в режиме отладки, я думаю, у вас должна быть log4j XML-конфигурация и добавление атрибута debug="true" к корневому элементу, как только это будет сделано (и предполагая, что файл конфигурации действительно прочитан), вы должны точно увидеть, что делает log4j.

0 голосов
/ 11 мая 2019

У меня была абсолютно такая же проблема. Файл был создан, но без каких-либо входов в него просто в консоли. И это было из-за неправильных зависимостей в проекте maven в моем случае.

Мой log4j.properties файл был:

# Root logger option
log4j.rootLogger=DEBUG, file

# Direct log messages to a log file
# configuration to print into file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10
# Define the layout for file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Set the name of the file
log4j.appender.file.File=C:\\log\\logging.log
# Set the append to false, overwrite
log4j.appender.file.Append=false

И я использовал в ПОМ:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.6.2</version>
</dependency>

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

Да, он создал для меня файл, в котором я нуждался, но журналы были в консоли. Затем я изменил его на другую зависимость, например:

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

И я наконец получил это в файле вместо консоли. Даже без каких-либо явных команд, таких как PropertyConfigurator.configure().

P.S. И будьте осторожны с конфигурацией в файле свойств. Потому что в вашем коде-примере console, но вам нужно использовать file.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...