jar中的log4j配置,已被另一个使用log4j的应用程序使用

jar中的log4j配置,已被另一个使用log4j的应用程序使用,jar,log4j,propertyconfigurator,Jar,Log4j,Propertyconfigurator,我的问题是,我试图设置log4j以从我的jar登录到一个文件中。这个jar由已经使用log4j的应用程序使用。我的jar是用log4j附带的maven包制作的。我正在尝试从属性文件初始化log4j,如下所示: log4j.properties log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender log4j.appender.FileAppender.File=${user.home}/.myproject/myproj

我的问题是,我试图设置log4j以从我的jar登录到一个文件中。这个jar由已经使用log4j的应用程序使用。我的jar是用log4j附带的maven包制作的。我正在尝试从属性文件初始化log4j,如下所示:

log4j.properties

log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.FileAppender.File=${user.home}/.myproject/myproject.log
log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.FileAppender.layout.ConversionPattern=%d{yy-MM-dd HH:MM:ss,SSS} [%t] %-5p     %c %x - %m%n
log4j.appender.FileAppender.MaxFileSize=5MB

#myproject is full package name

log4j.logger.myproject=,FileAppender
我已经将这个属性文件包含到我的jar资源中。我正在加载代码:

try {

            InputStream inputStream = this.getClass().getClassLoader()
                    .getResourceAsStream("log4j.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            inputStream.close();
            PropertyConfigurator.configure(properties);

        } catch (NullPointerException e) {
            BasicConfigurator.configure();
            throw new MyprojectException("log4j.properties not found", e);
        } catch (IOException e) {
            throw new MyprojectException("log4j.properties could not be loaded", e);
        }          
当我的jar没有被使用log4j的应用程序使用时,这段代码可以完美地工作。但事实是,我得到了一个空的日志文件,或者在某些应用程序中,根本没有创建任何日志文件

我已尝试手动添加appender,而不是像这样使用PropertyConfiguration:

static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Myproject.class); 
SimpleLayout layout = new SimpleLayout();    
FileAppender appender = new FileAppender(layout,"C:/out.log",true); 

logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
这似乎工作得很好,但我真的想从属性文件中配置log4j

我读过很多关于log4j如何处理多个实例的文章。我发现,一旦一个应用程序完成了log4j配置,我就无法更改属性加载的log4j配置。有人建议我应该提供我自己的log4jjar和config,并使用propertyconfigurator进行配置,这是我尝试过的,正如您所看到的,它不起作用。我很好奇为什么我的第二个例子是有效的,而第一个是无效的。我怎样才能解决这个问题

注: 我不想更改使用jar文件的应用程序的log4jconfig。 我还发现可以使用-Dlog4j.configuration系统属性,但我的jar不是一个可执行的jar文件,它是通过Class.forName加载的

感谢您的帮助

提前谢谢