如下图所示,运行的jar 包和 log4j 的配置文件放在同一个目录,jar包内没有任何配置文件:
在spring boot 框架的 main 方法中,通过下面这种方式,加载jar 包外的log4j配置文件
log4j配置文件的输出位置如下:
运行java -jar gf-mfile.jar 之后,控制台有info 日志信息,如下图:
系统也能够创建 micofile.log 日志文件,但是,文件为null,0字节,里面没有任何数据,info 日志信息没有写入文件中,如下图:
问题:
如果,我将log4j配置文件 打到jar 包中,如下图:
执行jar,日志文件是能够生成日志信息的。我把log4j配置文件,放到和jar 包同级目录就只创建日志文件不写入日志信息了。
为什么配置文件放到jar包外,日志文件中没有内容? 请大神赐教,感激不尽……
(本人推测,是否是main方法中的读取,log4j 配置文件的代码有问题,如果是这样应该怎么修改?)
또한 실행 중인 매개변수, 특히 classpath 매개변수에서 패키지 외부의 구성 파일이 클래스 경로에 포함되어 있는지 확인해야 합니다.
1. 구성 파일에서 LOG의 출력 레벨을 확인하세요
2. 코드의 Logger 코드가 출력 레벨과 일치하는지 확인하세요
아래 영웅의 제안(조작된 믿음)에 따라 문제가 마침내 성공적으로 해결되었습니다. 아래에 문제 해결을 위한 세부 단계를 기록하세요.
먼저 jar 패키지에서 MANIFEST.MF 파일을 찾아 파일을 찾습니다.
다음 명령을 실행합니다:
으아악로그 파일에 정보가 있습니다.
=========부록, java -cp 명령 분석================
java -cp .;c:dir1lib.jar 테스트
-cp는 -classpath와 동일합니다. 지정된 클래스가 실행되기 위해 의존하는 다른 클래스의 경로입니다. 일반적으로 클래스 라이브러리, jar 패키지 등입니다. jar 패키지의 전체 경로가 필요하며, 창의 세미콜론 ";"은
Linux에서는 세미콜론 ":"으로 구분됩니다. 와일드카드는 지원되지 않습니다. 현재 경로를 나타내려면 점 "."을 사용하여 모든 jar 패키지를 나열해야 합니다.
이제 Eclipse와 같은 IDE가 있지만 때로는 일부 프로그램을 수동으로 컴파일하여 실행하는 경우가 있습니다. 다년간의 개발 경험을 가진 사람들을 포함하여 많은 사람들이
명령줄에서 숫자를 사용하여 클래스를 실행하는 방법을 모릅니다. 약간 실망스럽습니다...
사용 예:
java -cp ..libhsqldb.jar org.hsqldb.Server -database mydb
또는
java -cp ../lib/hsqldb.jar org . hsqldb.Server -database.0 mydb -dbname.0 mydb