2012-05-21 14 views
22

Tôi đã thêm log4j.properties tệp trong thư mục nguồn của dự án nhưng tôi vẫn nhận được lỗi log4j:.Lỗi: "setFile (null, false) gọi không thành công" khi sử dụng log4j

Đây là Log4j.properties tập tin của tôi:

.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 

Đây là ngoại lệ của Java rằng tôi nhận được:

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) 

Xin vui lòng cho tôi biết, làm thế nào để giải quyết ngoại lệ này, như tôi có đã thử đặt tập tin thuộc tính của tôi trong thư mục gốc và bây giờ tôi đã đặt trong thư mục nguồn nhưng trong cả hai trường hợp, tôi đã nhận được ngoại lệ trên.

+0

log4j.appender.FILE.File = log/$ {} file.name đây không phải là trong trận chung kết tập tin, phải không? Vậy giá trị ở đây trong log4j.properties đã được triển khai là bao nhiêu? – eis

+0

Có thể trùng lặp của http://stackoverflow.com/questions/21140168/log4jerror-setfilenull-false-call-failed –

Trả lời

2

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

-> ứng dụng của bạn không thể ghi vào thư mục 'nhật ký'. Không liên quan đến cấu hình log4j như vậy. Tạo thư mục nếu nó không tồn tại và cung cấp cho nó đủ quyền cho ứng dụng web để viết vào nó.

+0

nhưng tôi đã tạo thư mục nhật ký song song với thư mục nguồn dự án của tôi. –

+0

1) Ứng dụng có quyền ghi vào thư mục không? 2) Thư mục có ở đúng vị trí không? Nó phải liên quan đến nơi ứng dụng được chạy. – eis

+0

yes, everyting là có, và các tập tin log4j.properties tương tự như tôi làm việc cho đến thứ sáu tuần trước. Tôi đã thực hiện thay đổi chỉ trong đường dẫn của log4j.appender.FILE.File và sau đó nó ngừng hoạt động. Sau đó, tôi xóa thùng rác của tôi và đặt log4j từ thư mục gốc vào thư mục nguồn. Vì log4j cần tệp thuộc tính được tải trong classpath. –

0

Hãy xem lỗi - 'log4j: ERROR setFile (null, false) cuộc gọi không thành công. java.io.FileNotFoundException: nhật ký (Truy cập bị từ chối) '

Có vẻ như có tệp nhật ký có tên' nhật ký 'bị từ chối truy cập tức là không có đủ quyền ghi nhật ký. Hãy thử bằng cách cấp quyền ghi vào tệp nhật ký 'nhật ký'. Hy vọng nó giúp.

4

Tôi gặp vấn đề tương tự. Dưới đây là giải pháp mà làm việc cho tôi: chỉ cần đặt tài sản của bạn tập tin đường dẫn trong dòng cmd theo cách này:

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

Hy vọng điều này sẽ giúp bạn

+1

Làm việc như một sự quyến rũ, 10x! –

22

tôi nghi ngờ rằng biến ${file.name} không thay một cách chính xác. Kết quả là giá trị của log4j.appender.FILE.File trở thành logs/. Như vậy, Java cố gắng tạo một tệp nhật ký có tên logs/, nhưng có lẽ nó là một thư mục hiện có, vì vậy bạn có ngoại lệ.

Để khắc phục nhanh, hãy thay đổi cài đặt log4j.appender.FILE.File để trỏ đến tệp theo đường dẫn tuyệt đối, ví dụ /tmp/mytest.log. Bạn không nên có ngoại lệ.

Sau đó bạn có thể tiến hành gỡ lỗi tại sao ${file.name} không được thay thế chính xác trong môi trường thời gian chạy của bạn.

+0

Điều này chắc chắn hữu ích trong các tình huống mà ứng dụng có nhiều hơn một tệp nhật ký –

0

Vui lòng thay đổi vị trí tệp nhật ký của bạn sang một ổ đĩa khác. nó sẽ hoạt động.

điều này xảy ra là sự cho phép tạo tệp nhật ký.

1

nếu nó là window7 (như tôi), không có quyền hành chính không thể viết một tập tin tại ổ C:

chỉ cần cung cấp một thư mục khác trong log4j.properties nộp

Set the name of the file

log4j.appender.FILE. Tệp = C: \ server \ log.ra bạn có thể nhìn thấy bằng notepad ++

-3

Hãy thử thực hiện lệnh của bạn với sudo (Super User), điều này làm việc cho tôi :)
Run: $ sudo your_command
Sau hơn nhập mật khẩu người dùng siêu. Thats All ..

+1

đôi khi bạn không thể có ưu thế như vậy trên một hệ thống được chia sẻ –

1

lỗi này là do vị trí tệp appender bạn đã cung cấp không thể truy cập được với quyền truy cập của người dùng hiện tại.

nhanh Giải pháp, thay đổi log4j.appender.FILE.File thiết để trỏ đến tập tin sử dụng đường dẫn tuyệt đối mà vị trí có thể truy cập cho người dùng hiện tại bạn đã đăng nhập, ví dụ /tmp/myapp.log. Bây giờ bạn không nên nhận được một lỗi.

2

tôi chỉ cần thêm quyền ghi vào "nhật ký" thư mục và nó làm việc cho tôi

add write permission

Các vấn đề liên quan