Ошибка: "setFile (null, false) call failed" при использовании log4j
Я добавил файл log4j.properties
в исходную папку проекта, но я все еще получаю ошибку log4j:.
Вот мой файл Log4j.properties:
.rootCategory=DEBUG, R, O
# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender
log4j.appender.O=log44j.log
# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
# Define the root logger with appender file
logDir = ../logs
log4j.rootLogger = DEBUG, FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=logs/${file.name}
log4j.appender.FILE.Append=false
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
Вот исключение Java, которое я получаю:
log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException: logs (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:809)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.apache.log4j.Logger.getLogger(Logger.java:104)
at lib.Dashboard.Reports.<init>(Reports.java:34)
at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:54)
AmazonDashboardTC_DB17Exception in thread "main" java.lang.NullPointerException
at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:131)
Пожалуйста, дайте мне знать, как разрешить это исключение, поскольку я попытался разместить файл свойств в корневой папке, и теперь я поместил его в исходную папку, но в обоих случаях я получил вышеописанное исключение.
Ответы
Ответ 1
Я подозреваю, что переменная ${file.name}
не заменена правильно. В результате значение log4j.appender.FILE.File
становится logs/
. Таким образом, Java пытается создать файл журнала с именем logs/
, но, вероятно, это уже существующий каталог, поэтому вы получаете исключение.
В качестве быстрого исправления измените параметр log4j.appender.FILE.File
, чтобы указать на файл по абсолютному пути, например /tmp/mytest.log
. Вы не должны получать исключение.
После этого вы можете приступить к отладке, почему ${file.name}
не правильно заменен в среде выполнения.
Ответ 2
У меня была такая же проблема. Вот решение, которое сработало для меня: просто поместите путь к файлу свойств в строку cmd следующим образом:
-Dlog4j.configuration=<FILE_PATH> (ex: log4j.properties)
Надеюсь, это поможет вам
Ответ 3
java.io.FileNotFoundException: журналы (доступ запрещен)
- > ваше приложение не может записывать в папку "журналы". Не относится к конфигурации log4j как таковой. Создайте папку, если она не существует, и дайте ей достаточно разрешений для веб-приложения для записи в нее.
Ответ 4
Я просто добавляю разрешение на запись в папку "logs", и это работает для меня
![добавить разрешение на запись]()
Ответ 5
если это окно7 (например, мое), без административных прав не удается записать файл на диске C:
просто укажите другую папку в файле log4j.properties
Задайте имя файла
log4j.appender.FILE.File = C:\server\log.out вы можете видеть с помощью блокнота ++
Ответ 6
Посмотрите на ошибку -
'log4j: Ошибка вызова ERROR setFile (null, false).
java.io.FileNotFoundException: журналы (доступ запрещен) '
Кажется, есть файл журнала с именем "logs", которому запрещен доступ, т. к. он не имеет достаточных разрешений для записи журналов. Попробуйте предоставить разрешения на запись в файл журнала журналов. Надеюсь, что это поможет.
Ответ 7
Пожалуйста, измените местоположение файла журнала на другой диск. он будет работать.
это имеет разрешение на создание файла журнала.
Ответ 8
эта ошибка возникает из-за того, что местоположение файла appender, которое вы предоставили, недоступно при текущем доступе пользователей.
Быстрое решение, измените параметр log4j.appender.FILE.File, чтобы указать на файл, используя абсолютный путь, местоположение которого доступно для текущего пользователя, который вы вошли в систему, например /tmp/myapp.log. Теперь вы не должны получать сообщение об ошибке.
Ответ 9
Попробуйте выполнить свою команду с помощью sudo (Super User), это сработало для меня:)
Выполнить: $sudo your_command
После этого введите пароль суперпользователя. Thats All..