Подтвердить что ты не робот

Ошибка: "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)

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

4b9b3361

Ответ 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..