jar中的log4j配置,已被另一个使用log4j的应用程序使用
我的问题是,我试图设置log4j以从我的jar登录到一个文件中。这个jar由已经使用log4j的应用程序使用。我的jar是用log4j附带的maven包制作的。我正在尝试从属性文件初始化log4j,如下所示: log4j.propertiesjar中的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.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加载的
感谢您的帮助
提前谢谢