Làm thế nào để khởi tạo log4j đúng cách?


280

Sau khi thêm log4j vào ứng dụng của mình, tôi nhận được đầu ra sau mỗi lần tôi thực thi ứng dụng của mình:

log4j: WARN Không tìm thấy ứng dụng nào cho logger (slideselector.facesata.FaceDataParser).
log4j: WARN Vui lòng khởi tạo hệ thống log4j đúng cách.

Có vẻ như điều này có nghĩa là một tập tin cấu hình bị thiếu. Tập tin cấu hình này nên được đặt ở đâu và nội dung bắt đầu tốt là gì?

Tôi đang sử dụng java đơn giản để phát triển ứng dụng máy tính để bàn. Vì vậy, không có máy chủ web, v.v ...


49
cho tất cả những người maven như tôi: đặt log4j.properies vào src / main / resource !!
Karussell

Tài liệu log4j có một mẫu rất cơ bản của tệp log4j.xml .
Ken Bloom

Sẽ rất hữu ích khi xem qua hướng dẫn ngắn của Log4j: log.apache.org/log4j/1.2/manual.html
Sa'ad

Câu trả lời:


278

Log4jtheo mặc định sẽ tìm một tệp được gọi log4j.propertieshoặc log4j.xmltrên đường dẫn lớp.

Bạn có thể kiểm soát tệp nào nó sử dụng để tự khởi tạo bằng cách đặt thuộc tính hệ thống như được mô tả tại đây (Tìm phần "Quy trình khởi tạo mặc định").

Ví dụ:

java -Dlog4j.configuration=customName ....

Sẽ log4jtìm một tệp có tên customName trên đường dẫn lớp.

Nếu bạn gặp vấn đề, tôi thấy hữu ích khi bật log4j.debug:

-Dlog4j.debug

Nó sẽ in ra System.out rất nhiều thông tin hữu ích về tập tin mà nó đã sử dụng để tự khởi tạo, logger / appender nào đã được cấu hình và cách v.v.

Tệp cấu hình có thể là tệp thuộc tính java hoặc tệp xml. Dưới đây là một mẫu định dạng tệp thuộc tính được lấy từ trang tài liệu giới thiệu log4j :

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

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

43
Vì vậy, để tải tệp configuartion từ một tệp không có trên đường dẫn lớp, bạn phải thực hiện như sau: -Dlog4j.configuration = file: / c: /my/folder/log4j.properies thực sự là một URL.
bbcooper

15
một mẹo nhỏ mà có lẽ ai đó sẽ thấy hữu ích: bạn cũng có thể bật trình gỡ lỗi log4j bằng cách bật thuộc tính tương ứng trong mã - System.setProperty ("log4j.debug", "");
Xx

Bạn đặt ở java -Dlog4j.configuration=customNameđâu? Tôi đã thử Cài đặt Project / Preferences / Run / Debug, chọn một số cấu hình, nhấp vào Chỉnh sửa, tab Đối số, đối số VM. CustomName có bao gồm phần mở rộng .xml không?
Noumenon

2
Sau khi thử nhiều biến thể, điều này đã hoạt động: -Dlog4j.configuration = file: /// C: /mydir/subdir/log4j.properies Ví dụ trên: -Dlog4j.configuration = file: / c: /my/folder/log4j.propericat thất bại.
dùng1062589

1
Tôi thực sự muốn hướng dẫn sử dụng sẽ nhấn mạnh nhiều hơn -Dlog4j.debugcó thể giúp gỡ lỗi cấu hình của bạn.
Sridhar Sarnobat

239

Mặc dù thiết lập log4j đúng cách rất tốt cho các dự án "thực", bạn có thể muốn một giải pháp nhanh và bẩn, ví dụ nếu bạn chỉ đang thử nghiệm một thư viện mới.

Nếu vậy một cuộc gọi đến phương thức tĩnh

org.apache.log4j.BasicConfigurator.configure();

sẽ thiết lập ghi nhật ký cơ bản vào bàn điều khiển và các thông báo lỗi sẽ biến mất.


Chào a3. 14_Không nên sử dụng cái này ở đâu? tôi không thể hiểu thậm chí tôi đã giới thiệu nhiều câu trả lời cho vấn đề này. hãy giúp tôi
Ravi Potnuru

5
Hãy nhớ rằng điều này sẽ mặc định để ghi nhật ký mức gỡ lỗi, có thể không mong muốn. Bạn có thể thay đổi như vậy:Logger.getRootLogger().setLevel(Level.INFO);
forresthopkinsa

Không chỉ các cảnh báo biến mất, mà tôi còn nhận được một số thông tin gỡ lỗi hữu ích trong cửa sổ giao diện điều khiển
Nướng vào

2
thật mỉa mai..chúng tôi sử dụng nó trên trạng thái sản xuất
vào

25

Nếu bạn thoát khỏi mọi thứ (ví dụ nếu bạn đang trong bài kiểm tra)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

20

Theo trang Câu hỏi thường gặp về Apache Log4j :

Tại sao tôi thấy cảnh báo về "Không tìm thấy ứng dụng nào cho logger" và "Vui lòng định cấu hình log4j đúng cách"?

Điều này xảy ra khi các tệplog4j.propertieslog4j.xml cấu hình mặc định không thể tìm thấy và ứng dụng không thực hiện cấu hình rõ ràng. log4jsử dụng Thread.getContextClassLoader().getResource()để định vị các tệp cấu hình mặc định và không trực tiếp kiểm tra hệ thống tệp. Biết vị trí thích hợp để đặt log4j.properies hoặc log4j.xmlyêu cầu hiểu chiến lược tìm kiếm của trình nạp lớp đang sử dụng. log4jkhông cung cấp cấu hình mặc định do đầu ra cho bàn điều khiển hoặc hệ thống tệp có thể bị cấm trong một số môi trường.

Về cơ bản cảnh báo Không thể tìm thấy trìnhlog4j bổ sung nào cho logger có nghĩa là bạn đang sử dụng hệ thống ghi nhật ký, nhưng bạn chưa thêm bất kỳ Appender nào (như FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, v.v.) vào tệp cấu hình của bạn hoặc tệp cấu hình là còn thiếu.

Có ba cách để định cấu hình log4j: với tệp thuộc tính ( log4j.properties), với tệp XML và thông qua mã Java ( rootLogger.addAppender(new NullAppender());).

log4j.properties

Nếu bạn có tệp thuộc tính (ví dụ: khi cài đặt Solr), bạn cần đặt tệp này trong thư mục classpath của mình .

lớp học

Dưới đây là một số gợi ý lệnh trong Linux cách xác định giá trị đường dẫn của bạn:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

hoặc từ Java : System.getProperty("java.class.path").

Log4j XML

Dưới đây là tệp cấu hình XML cơ bản cho log4j ở định dạng XML:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>

</log4j:configuration>

Mèo con

Nếu bạn đang sử dụng Tomcat, bạn có thể đặt bạn log4j.propertiesvào: /usr/share/tomcat?/lib/hoặc /var/lib/tomcat?/webapps/*/WEB-INF/lib/thư mục.

Solr

Để tham khảo, log4j.propertiestệp mặc định Solr trông giống như:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Tại sao log4j không thể tìm thấy tệp thuộc tính của tôi trong ứng dụng J2EE hoặc WAR?

Câu trả lời ngắn gọn: các lớp log4j và tệp thuộc tính không nằm trong phạm vi của cùng một trình nạp lớp.

Log4j chỉ sử dụng Class.forName()cơ chế mặc định để tải các lớp. Tài nguyên được xử lý tương tự. Xem tài liệu java.lang.ClassLoaderđể biết thêm chi tiết.

Vì vậy, nếu bạn gặp vấn đề, hãy thử tự tải lớp hoặc tài nguyên. Nếu bạn không thể tìm thấy nó, thì log4j cũng không. ;)


Xem thêm:


12

Bạn có thể đặt vị trí của log4j.properies từ bên trong ứng dụng java của mình bằng cách sử dụng:

org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)

Thêm thông tin có sẵn ở đây: https://logging.apache.org/log4j/1.2/manual.html


1
Hừm, lớp không tìm thấy. Một importtuyên bố luôn hữu ích vì việc hoàn thành mã không đáng tin cậy lắm.
Martin

11

Tìm một log4j.properies hoặc log4j.xml trực tuyến có ứng dụng gốc và đặt nó trên đường dẫn lớp của bạn.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

sẽ đăng nhập vào giao diện điều khiển. Tôi thích đăng nhập vào một tập tin để bạn có thể điều tra sau đó.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

mặc dù đối với các ứng dụng ghi nhật ký dài, 100KB thường cần được tăng lên 1MB hoặc 10MB, đặc biệt là để gỡ lỗi.

Cá nhân tôi thiết lập nhiều logger và đặt logger gốc để cảnh báo hoặc mức lỗi thay vì gỡ lỗi.


9

Một cách khác để làm điều đó mà không đặt tệp thuộc tính trên đường dẫn lớp, là đặt thuộc tính trực tiếp từ mã java. Đây là mã mẫu.

public class Log4JSample {

public static void main(String[] args) {
    Properties properties=new Properties();
    properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
    properties.setProperty("log4j.rootCategory","TRACE");

    properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
    properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
    properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
    properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
    properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
    properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    PropertyConfigurator.configure(properties);

    Logger logger = Logger.getLogger("MyFile");

    logger.fatal("This is a FATAL message.");
    logger.error("This is an ERROR message.");
    logger.warn("This is a WARN message.");
    logger.info("This is an INFO message.");
    logger.debug("This is a DEBUG message.");
    logger.trace("This is a TRACE message.");
}

}


6

Bạn có thể thiết lập mức ghi nhật ký bằng cách sử dụng setLevel () .

Các mức rất hữu ích để dễ dàng thiết lập loại thông tin bạn muốn chương trình hiển thị.

Ví dụ:

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

Tập hợp các cấp độ có thể là:

TRACE,

GỬI

THÔNG TIN,

CẢNH BÁO,

LRI và

BẠC

Theo hướng dẫn sử dụng dịch vụ đăng nhập


6
import org.apache.log4j.BasicConfigurator;

Gọi phương thức này

BasicConfigurator.configure();

Cụ thể, điều này viết cho System.out. Javadoc cho phương thức cấu hình no-args cho biết:Add a ConsoleAppender that uses PatternLayout using the PatternLayout#TTCC_CONVERSION_PATTERN and prints to System.out to the root category.
sunil

3

Để bật -Dlog4j.debug, tôi đi đến Hệ thống, Cài đặt hệ thống nâng cao, Biến môi trường và đặt biến hệ thống _JAVA_OPTIONSthành -Dlog4j.debug.


1

Bạn đang phát triển cái gì? Bạn đang sử dụng Apache Tomcat?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

Tôi có một thuộc tính như thế này trong một ứng dụng Java của tôi.


1

Log4j của tôi đã được sửa bởi tệp thuộc tính bên dưới:

## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

Xin chào, làm thế nào tôi có thể thêm cấu hình để gỡ lỗi vào bàn điều khiển và lỗi vào tệp?
JhonArias

1

Tôi đã tạo tệp log4j.properies trong thư mục tài nguyên bên cạnh tệp hibernate.cfg.xml và điền vào văn bản bên dưới:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

bây giờ tôi đã thoát khỏi các cảnh báo và lỗi


1

Đơn giản, tạo log4j.properies trong thư mục src / main / assembly. Tùy thuộc vào việc bạn muốn thông báo nhật ký được hiển thị trong bảng điều khiển hoặc trong tệp bạn sửa đổi tệp của mình. Sau đây sẽ hiển thị tin nhắn của bạn trong bảng điều khiển.

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

Như đã giải thích trước đó, có 2 cách tiếp cận

Đầu tiên là chỉ cần thêm dòng này vào phương thức chính của bạn:

BasicConfigurator.configure();

Cách tiếp cận thứ hai là thêm tệp log4j.properIES tiêu chuẩn này vào đường dẫn lớp của bạn:

Trong khi thực hiện phương pháp thứ hai, bạn cần đảm bảo rằng bạn khởi tạo tệp đúng cách.

Ví dụ.

Properties props = new Properties();

props.load(new FileInputStream("log4j property file path"));

props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

Hãy chắc chắn rằng bạn tạo thư mục cần thiết để lưu trữ tệp nhật ký.


1

Cố gắng đặt thuộc tính gỡ lỗi trong log4j: nút cấu hình thành true.

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

Nó in ra thông tin khi tệp cấu hình được đọc và sử dụng để cấu hình môi trường log4j. Bạn có thể có thêm thông tin chi tiết để giải quyết vấn đề của bạn.


Có ai biết không? Có phải tùy chọn tương tự cũng có thể sử dụng được từ cấu hình thuộc tính mà không quay lại cài đặt -Dlog4j.debug = true khi khởi động thời gian chạy không?
JFK

1

API ghi nhật ký - API ghi nhật ký Java tạo điều kiện cho việc bảo trì và bảo trì phần mềm tại các trang web của khách hàng bằng cách tạo các báo cáo nhật ký phù hợp để phân tích bởi người dùng cuối, quản trị viên hệ thống, kỹ sư dịch vụ hiện trường và nhóm phát triển phần mềm. API ghi nhật ký nắm bắt thông tin như lỗi bảo mật, lỗi cấu hình, tắc nghẽn hiệu suất và / hoặc lỗi trong ứng dụng hoặc nền tảng. Gói lõi bao gồm hỗ trợ để cung cấp văn bản đơn giản hoặc bản ghi nhật ký được định dạng XML vào bộ nhớ, luồng đầu ra, bảng điều khiển, tệp và ổ cắm. Ngoài ra, các API ghi nhật ký có khả năng tương tác với các dịch vụ ghi nhật ký đã tồn tại trên hệ điều hành máy chủ.

Gói java.util.logging «Cung cấp các lớp và giao diện của các phương tiện ghi nhật ký cốt lõi của nền tảng Java.


Log4j 1.x «log4j là một tiện ích ghi nhật ký dựa trên Java phổ biến. Log4j là một dự án nguồn mở dựa trên công việc của nhiều tác giả. Nó cho phép nhà phát triển kiểm soát các báo cáo nhật ký nào được xuất ra nhiều vị trí khác nhau bằng cách sử dụng Appender [bảng điều khiển, tệp, DB và email]. Nó có thể cấu hình đầy đủ trong thời gian chạy bằng cách sử dụng các tệp cấu hình bên ngoài.

Log4j có ba thành phần chính:

  • Loggers - [TẮT, BẠC, LRI, WARN, INFO, DEBUG, TRACE]
  • Ứng viên

    • Ghi nhật ký Commons của Apache: ConsoleAppender, FileAppender, RollingFileAppender, DailyRollingFileAppender, JDBCAppender- Driver, SocketAppender

    • Trình ứng dụng Log4J cho MongoDB: MongoDbAppender -Driver

  • Bố cục - [PatternLayout, EnhizedPotypeLayout]

Các tệp cấu hình có thể được viết bằng XML hoặc ở định dạng Java (key = value).

  1. log4j_External.properies «Định dạng Java (key = value)

Chuỗi giữa mở " $ { " và đóng " } " được hiểu là một khóa. Giá trị của biến được thay thế có thể được định nghĩa là thuộc tính hệ thống hoặc trong chính tệp cấu hình. Đặt tùy chọn cụ thể cho ứng dụng. «Log4j.appender.appenderName.option = value, với mỗi appender có tên, bạn có thể định cấu hình Bố cục của nó.

log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql

#log.path=./
log.path=E:/Logs

# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n

# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}

# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}

# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}

# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}

# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');

# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

Cấu trúc bảng MySQL cho bảng logdata

CREATE TABLE IF NOT EXISTS `logdata` (
  `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `LineNumber` int(10) NOT NULL,
  `Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xml «XML log4j: cấu hình với tệp DTD công khai
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="file" value="E:/Logs/logFile.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="E:/Logs/logRollingFile.log" />
        <param name="immediateFlush" value="true"/>
        <param name="maxFileSize" value="100KB" />
        <param name="maxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="E:/Logs/logRollingDayFile.log" />
        <param name="datePattern" value="'_'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_PER_SIZE" />
        <appender-ref ref="FILE_PER_DAY" />
    </root>
</log4j:configuration>

  1. Cấu hình Log4j từ URL trong chương trình Java:

Để chỉ định cấu hình tùy chỉnh với tệp bên ngoài, lớp được sử dụng phải thực hiện giao diện Trình cấu hình .

khi các tệp cấu hình mặc định "log4j.properIES", "log4j.xml" không khả dụng

  • Đối với "log4j.properies", bạn có thể cung cấp cho phương thức PropertyConfigurator .configure (java.net.URL).
  • Đối với DOMConfigurator "log4j.xml" sẽ được sử dụng.
public class LogFiles {
    // Define a static logger variable so that it references the Logger instance named "LogFiles".
    static final Logger log = Logger.getLogger( LogFiles.class );

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
        System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");

        String fileName = //"";
                //"log4j_External.xml";
                "log4j_External.properties";
        String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;

        if( fileName.contains(".xml") ) {
            DOMConfigurator.configure( configurationFile );
            log.info("Extension *.xml");
        } else if ( fileName.contains(".properties") ) {
            PropertyConfigurator.configure( configurationFile );
            log.info("Extension *.properties");
        } else {
            DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
            dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
            dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");

            PatternLayout layout = new PatternLayout();
            layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
            dailyRollingAppender.setLayout(layout);

            dailyRollingAppender.activateOptions();

            Logger rootLogger = Logger.getRootLogger();
            rootLogger.setLevel(Level.DEBUG);
            rootLogger.addAppender(dailyRollingAppender);

            log.info("Configuring from Java Class.");
        }

        log.info("Console.Message.");
        method2();
        methodException(0);
    }

    static void method2() {
        log.info("method2 - Console.Message.");
    }
    static void methodException(int b) {
        try {
            int a = 10/b;
            System.out.println("Result : "+ a);
            log.info("Result : "+ a);
        } catch (Exception ex) { // ArithmeticException: / by zero
            log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
        }
    }
    public static String stackTraceToString(Exception ex) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        return sw.toString();
    }
}

1

Cách khắc phục đối với tôi là đưa "log4j.properies" vào thư mục "src".


0

Nếu chúng ta đang sử dụng trình bao bọc đăng nhập apache commons trên đầu log4j, thì chúng ta cần phải có cả hai lọ có sẵn trong classpath. Ngoài ra, commons-logging.propertieslog4j.properties/xmlnên có sẵn trong classpath.

Chúng ta cũng có thể vượt qua lớp thực hiện và log4j.propertiestên như JAVA_OPTSlà sử dụng -Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>. Điều tương tự có thể được thực hiện thông qua cài đặt JAVA_OPTStrong trường hợp ứng dụng / máy chủ web.

Nó sẽ giúp để bên ngoài các thuộc tính có thể được thay đổi trong triển khai.


0

Đây là một cách khác để sử dụng .yaml

Cấu trúc logic:

Configuration:
    Properties:
    Appenders:
    Loggers:

Mẫu vật:

Configutation:
    name: Default

    Properties:
        Property:
            name: log-path
            value: "logs"

    Appenders:

        Console:
        name: Console_Appender
        target: SYSTEM_OUT
        PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

       File:
          name: File_Appender
          fileName: ${log-path}/logfile.log
          PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

    Loggers:

        Root:
            level: debug
            AppenderRef:
              - ref: Console_Appender

        Logger:
            - name: <package>.<subpackage>.<subsubpackage>.<...>
              level: debug
              AppenderRef:
                 - ref: File_Appender
                 level: error             

Tham chiếu: LOG4J 2 CẤU HÌNH: SỬ DỤNG YAML


0

Để thử nghiệm, một cách nhanh chóng bẩn bao gồm thiết lập mức nhật ký:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);

// set to Level.DEBUG for full, or Level.OFF..

0

Giải pháp Maven:

Tôi đã gặp tất cả các vấn đề tương tự như trên và đối với một giải pháp maven tôi đã sử dụng 2 phụ thuộc. Cấu hình này chỉ có nghĩa là để thử nghiệm nhanh nếu bạn muốn một dự án đơn giản sử dụng bộ ghi, với cấu hình tiêu chuẩn. Tôi có thể tưởng tượng bạn muốn tạo một tệp cấu hình sau này nếu bạn cần thêm thông tin và hoàn thiện mức ghi nhật ký của riêng bạn.

    <properties>
        <slf4jVersion>1.7.28</slf4jVersion>
    </properties>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>

0

Tôi chỉ làm điều này và vấn đề đã được khắc phục.

Theo dõi blog dưới đây

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-ricky-an-Application-inside-IntelliJ- Ý tưởng

Nhưng ở đây anh nói như dưới đây.

Để khắc phục điều đó, chỉ cần nhập tệp log4j.resource sau vào thư mục chính / tài nguyên của dự án của bạn

thay vì tạo log4j.resource, hãy tạo log4j.properies. Nhấp chuột phải vào Tài nguyên trong IntelliJ -> Mới -> Gói tài nguyên - Chỉ cần đặt tên là log4j


0

Nếu bạn gặp lỗi này trên Intellij IDEA ngay cả sau khi thêm log4j.propertieshoặclog4j.xml tệp vào thư mục kiểm tra tài nguyên của bạn, có thể Intellij IDEA vẫn chưa biết về sự tồn tại của tệp.

Vì vậy, sau khi thêm tệp, nhấp chuột phải vào tệp và chọn Biên dịch lại log4j.xml .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.