Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署后通过log4j配置的slf4j_Java_Log4j_Slf4j - Fatal编程技术网

Java 部署后通过log4j配置的slf4j

Java 部署后通过log4j配置的slf4j,java,log4j,slf4j,Java,Log4j,Slf4j,我已经构建了一个java应用程序,并且一直在使用slf4j/log4j进行日志记录。现在,我想向用户提供一种可能性,即在不需要重新构建.jar文件的情况下更改日志记录级别 我已经了解到,要做到这一点,属性文件必须位于应用程序的类路径内。我已经尝试在MANIFEST.MF文件中使用类路径头来实现这一点,但是它不起作用 这是我试过的两个例子 Class-Path:./config/ Class-Path:C:/users/user/directory/tools/config/ 但是,这些似乎都没

我已经构建了一个java应用程序,并且一直在使用slf4j/log4j进行日志记录。现在,我想向用户提供一种可能性,即在不需要重新构建.jar文件的情况下更改日志记录级别

我已经了解到,要做到这一点,属性文件必须位于应用程序的类路径内。我已经尝试在MANIFEST.MF文件中使用类路径头来实现这一点,但是它不起作用

这是我试过的两个例子

Class-Path:./config/
Class-Path:C:/users/user/directory/tools/config/
但是,这些似乎都没有添加到类路径中,因为我尝试在应用程序开始运行后打印其内容。

正如所建议的,我最后向java执行命令添加了一个参数。请记住,如果像我一样通过bash命令执行,则需要将完整路径添加到目录中

java -Dlog4j.configuration=file:/path/to/log4j.properties -jar myApp.jar
我不喜欢这样,因为它使它非常依赖于路径配置,但它就足够了。

正如所建议的,我最后向java执行命令添加了一个参数。请记住,如果像我一样通过bash命令执行,则需要将完整路径添加到目录中

java -Dlog4j.configuration=file:/path/to/log4j.properties -jar myApp.jar

我不喜欢这样做,因为这使它非常依赖于路径配置,但它就足够了。

请在下面找到可能的解决方案列表

1)
java-jarmyapp.jar
将按以下顺序搜索
log4j.properties

  • myApp.jar的根目录
  • myApp.jar的头
    类路径:
    中指定的目录
2)
java-Dlog4j.configuration=file://path/to/file//log4j.properties -jar myApp.jar
将使用
-Dlog4j.configuration=…

3)
java-Xbootclasspath/a:../config-jar myApp.jar
将按以下顺序搜索
log4j.properties

  • 目录
    。/config/
  • myApp.jar的根目录
  • myApp.jar的清单头
    类路径:
    中指定的目录
我相信解决方案1)应该像下面这样解决您的问题

  • 确保
    myApp.jar的根目录中没有
    log4j.configuration
  • 清单头包含例如
    类路径:config/
  • 您安装的目录结构是
    ./myApp.jar
    /配置/
编辑避免硬编码路径的可能解决方案,但为
log4j使用定义的位置。属性
文件可以如下所示

假设应用程序的结构如下

c:\somewhere\myApp.jar
c:\somewhere\config\log4j.properties
c:\somewhere\run_myapp.cmd
运行_myapp.cmd

@echo off
... do your necessary preparation here
java -Dlog4j.configuration=file:%~dp0log4j_2.properties -jar myApp.jar
这将始终使用相对于您的
myApp.jar
config\log4j.properties

%~pd
-扩展到
run_myapp.cmd的驱动器号和路径


使用此解决方案,您的用户需要在给定位置存储属性文件,但不需要更改
run\u myapp.cmd
脚本。

请在下面找到可能的解决方案列表

1)
java-jarmyapp.jar
将按以下顺序搜索
log4j.properties

  • myApp.jar的根目录
  • myApp.jar的头
    类路径:
    中指定的目录
2)
java-Dlog4j.configuration=file://path/to/file//log4j.properties -jar myApp.jar
将使用
-Dlog4j.configuration=…

3)
java-Xbootclasspath/a:../config-jar myApp.jar
将按以下顺序搜索
log4j.properties

  • 目录
    。/config/
  • myApp.jar的根目录
  • myApp.jar的清单头
    类路径:
    中指定的目录
我相信解决方案1)应该像下面这样解决您的问题

  • 确保
    myApp.jar的根目录中没有
    log4j.configuration
  • 清单头包含例如
    类路径:config/
  • 您安装的目录结构是
    ./myApp.jar
    /配置/
编辑避免硬编码路径的可能解决方案,但为
log4j使用定义的位置。属性
文件可以如下所示

假设应用程序的结构如下

c:\somewhere\myApp.jar
c:\somewhere\config\log4j.properties
c:\somewhere\run_myapp.cmd
运行_myapp.cmd

@echo off
... do your necessary preparation here
java -Dlog4j.configuration=file:%~dp0log4j_2.properties -jar myApp.jar
这将始终使用相对于您的
myApp.jar
config\log4j.properties

%~pd
-扩展到
run_myapp.cmd的驱动器号和路径


使用此解决方案,您的用户需要将属性文件存储在给定位置,但无需更改
run\u myapp.cmd
脚本。

查看我的更新答案。这可能是防止硬编码绝对路径的解决方案。请查看我的更新答案。这可能是防止硬编码绝对路径的解决方案。