web-dev-qa-db-ja.com

エラー:log4jを使用すると「setFile(null、false)call failed」

私が追加しました log4j.propertiesプロジェクトのソースフォルダーにファイルがありますが、log4j:errorが表示されます。

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)

この例外を解決する方法を教えてください。プロパティファイルをルートフォルダーに配置しようとし、ソースフォルダーに配置しましたが、どちらの場合も上記の例外が発生しました。

28
Shashank Jain

変数${file.name}が正しく置換されていないようです。その結果、log4j.appender.FILE.Fileの値はlogs/になります。そのため、Javaはlogs/という名前のログファイルを作成しようとしますが、おそらく既存のディレクトリであるため、例外が発生します。

迅速な解決策として、log4j.appender.FILE.Fileのような絶対パスでファイルを指すように/tmp/mytest.log設定を変更します。例外は発生しないはずです。

その後、ランタイム環境で${file.name}が正しく置き換えられない理由のデバッグに進むことができます。

26
janos

私はまったく同じ問題を抱えていました。私のために働いた解決策は次のとおりです:単純にこのようにcmd行にプロパティファイルのパスを入れてください:

-Dlog4j.configuration=<FILE_PATH>  (ex: log4j.properties)

これがあなたを助けることを願っています

5
Firas

Java.io.FileNotFoundException:ログ(アクセスが拒否されました)

->アプリは「ログ」フォルダに書き込むことができません。 log4j構成とは関係ありません。フォルダーが存在しない場合は作成し、Webアプリが書き込むための十分なアクセス許可を与えます。

2
eis

「ログ」フォルダに書き込み許可を追加するだけで、それが機能します

add write permission

2
Hatem Badawi

このエラーは、指定したアペンダーファイルの場所が現在のユーザーアクセスでは到達できないために発生します。

クイックソリューション、log4j.appender.FILE.Fileの設定を、ログインしている現在のユーザーがアクセスできる場所の絶対パスを使用して、たとえば/ tmp/myapp .log。これでエラーは発生しません。

それがwindow7(私のような)の場合、管理者権限がないとC:ドライブにファイルを書き込めません

log4j.propertiesファイルに別のフォルダーを指定するだけです

ファイルの名前を設定します

log4j.appender.FILE.File = C:\ server\log.out notepad ++で確認できます

1
vimal krishna

ログファイルの場所を別のドライブに変更してください。それが動作します。

これは、ログファイルを作成する許可です。

0
user3221176

これはあなたの設定です:

log4j.appender.FILE.File=logs/${file.name}

そして、このエラーが発生しました:

Java.io.FileNotFoundException: logs (Access is denied)

したがって、変数file.nameは設定されず、Javaはディレクトリlogsに書き込もうとします。


force変数の値${file.name}このオプションでmavenを呼び出す-D

mvn clean test -Dfile.name=logfile.log
0
DependencyHell

この問題を防ぐため、ディレクトリ$ {kafka.logs.dir}のlog4j.propertiesファイルのすべての値を自分のディレクトリに変更しました。たとえば、D:/ temp/...

0
Armer B.

エラーを見てください-'log4j:ERROR setFile(null、false)call failed。 Java.io.FileNotFoundException:ログ(アクセスが拒否されました) '

アクセスが拒否された「ログ」という名前のログファイルがあるようです。つまり、ログを書き込むための十分な権限がありません。 「ログ」ログファイルに書き込み権限を付与してみてください。それが役に立てば幸い。

0
priti