When log4j is in the classpath, by default POI just throws this lovely exception: log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: build/poifs.log (No such file or directory) at java.io.FileOutputStream.openAppend(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:100) at java.io.FileWriter.<init>(FileWriter.java:52) at org.apache.log4j.FileAppender.setFile(FileAppender.java:284) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:239) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:247) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:123) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:87) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:637) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:595) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:522) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:412) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:436) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:455) at org.apache.log4j.Category.<clinit>(Category.java:146) at org.apache.commons.logging.impl.Log4JCategoryLog.<init>(Log4JCategoryLog.java:97) at java.lang.reflect.Constructor.newInstance(Native Method) at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:487) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:285) at org.apache.poi.util.POILogFactory.getLogger(POILogFactory.java:121) at org.apache.poi.util.POILogFactory.getLogger(POILogFactory.java:100) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<clinit>(HSSFWorkbook.java:113) at org.apache.poi.hssf.usermodel.examples.NewSheet.main(NewSheet.java:73) log4j:ERROR setFile(null,true) call failed. for each package. IT should be pulling this from an environment variable which specifies a property file which if anything fails should default to /dev/null. Lots of folks will not want to use POI's logging but might want to have log4j in the classpath.
- IT should be pulling this from an environment variable it does, this is just the default behaviour. To make thing easier for users, I've changed now the default properties of log4j to output to null even when jog4j is present. To override, one can use commoms logging env variables or simply replace src/java/log4j.properties with the one in src/resources/devtools, that works as usual for developers.