log4j 无法在具有 log4j.properties 文件的 tomcat8 服务器上运行
log4j not working on tomcat8 server with log4j.properties file
我正在尝试使用 Ghost4j 将一些 PDF 文件转换为 PNG。这个库需要 log4j 才能工作,所以我也将 log4j 添加到我的库中。
因为我的应用程序是动态 Web 项目,所以我将库添加到文件夹 WEB-INF/lib。
当我尝试 运行 我本地 tomcat8 服务器上的应用程序时,它记录了一些警告,例如:
log4j:WARN No appenders could be found for logger (org.ghost4j.Ghostscript).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
所以,在网上冲浪时,我发现我的应用程序中缺少 log4j.properties 文件。因此,我创建了文件 log4j.properties 并将其添加到 WEB-INF/classes 中(正如 Whosebug 的其他一些 post 所建议的那样)。然后,通过此修复,我的 locat tomcat8 服务器上的应用程序 运行 运行顺利。
然而,当我尝试将它部署到远程 tomcat8 服务器上时,该应用程序无法运行。问题是它不会产生任何类型的异常,它只是中断了它的工作。有或没有 log4j.properties 文件,在远程 tomcat8 服务器上没有区别:它只是在相同的 "code line" 处停止 运行ning,之前在我的本地服务器上记录警告我之前写过
感谢任何帮助。
P.S.: 转换代码非常简单。我 post 它来完成我的问题:
private void createImages(String machine, String fileName){
LOGGER.warning("started creating images");
try{
PDFDocument document = new PDFDocument();
document.load(new File(DOCS_DIR + machine + "/" + fileName + ".pdf"));
String commonPath = IMGS_DIR + machine + "/" + fileName + "/";
Path path = Paths.get(new File(commonPath).getPath());
if(Files.notExists(path, LinkOption.NOFOLLOW_LINKS)){
new File(commonPath).mkdirs();
}
SimpleRenderer renderer = new SimpleRenderer();
renderer.setResolution(300);
renderer.setAntialiasing(SimpleRenderer.OPTION_ANTIALIASING_HIGH);
LOGGER.warning("IT STOPS HERE!!");
List<Image> images = renderer.render(document); // this is the line in which the execution of the program stops..
LOGGER.warning("pdf pages are: " + images.size());
for (int i = 0; i < images.size(); i++) {
Image img = images.get(i);
Image scaledImg = img.getScaledInstance(1200, -1, Image.SCALE_SMOOTH);
BufferedImage newImage = new BufferedImage(scaledImg.getWidth(null), scaledImg.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(scaledImg, 0, 0, null);
g.dispose();
String extension = ".png";
String imgName = commonPath + (i + 1) + extension;
LOGGER.warning("creating img n: " + (i+1) + " - creating img in folder: " + imgName);
ImageIO.write((RenderedImage) newImage, "png", new File(imgName));
}
LOGGER.warning("finished creating images!");
} catch(FileNotFoundException e){
LOGGER.warning("ERROR DOCUMENT SERVICE -- FileNotFoundException");
LOGGER.warning(e.printStackTrace());
} catch (IOException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- IOException");
LOGGER.warning(e.printStackTrace());
} catch (RendererException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- RendererException");
LOGGER.warning(e.printStackTrace());
} catch (DocumentException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- DocumentException");
LOGGER.warning(e.printStackTrace());
} catch (Exception e){
LOGGER.warning("ERROR DOCUMENT SERVICE -- Exception");
LOGGER.warning(e.printStackTrace());
}
}
最后我自己找到了解决办法。
这个问题与 log4j 没有任何关系,但它没有工作,因为它在服务器上缺少 Ghostscript。
在服务器上安装 Ghostscript 后,一切正常。
我正在尝试使用 Ghost4j 将一些 PDF 文件转换为 PNG。这个库需要 log4j 才能工作,所以我也将 log4j 添加到我的库中。
因为我的应用程序是动态 Web 项目,所以我将库添加到文件夹 WEB-INF/lib。
当我尝试 运行 我本地 tomcat8 服务器上的应用程序时,它记录了一些警告,例如:
log4j:WARN No appenders could be found for logger (org.ghost4j.Ghostscript).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
所以,在网上冲浪时,我发现我的应用程序中缺少 log4j.properties 文件。因此,我创建了文件 log4j.properties 并将其添加到 WEB-INF/classes 中(正如 Whosebug 的其他一些 post 所建议的那样)。然后,通过此修复,我的 locat tomcat8 服务器上的应用程序 运行 运行顺利。
然而,当我尝试将它部署到远程 tomcat8 服务器上时,该应用程序无法运行。问题是它不会产生任何类型的异常,它只是中断了它的工作。有或没有 log4j.properties 文件,在远程 tomcat8 服务器上没有区别:它只是在相同的 "code line" 处停止 运行ning,之前在我的本地服务器上记录警告我之前写过
感谢任何帮助。
P.S.: 转换代码非常简单。我 post 它来完成我的问题:
private void createImages(String machine, String fileName){
LOGGER.warning("started creating images");
try{
PDFDocument document = new PDFDocument();
document.load(new File(DOCS_DIR + machine + "/" + fileName + ".pdf"));
String commonPath = IMGS_DIR + machine + "/" + fileName + "/";
Path path = Paths.get(new File(commonPath).getPath());
if(Files.notExists(path, LinkOption.NOFOLLOW_LINKS)){
new File(commonPath).mkdirs();
}
SimpleRenderer renderer = new SimpleRenderer();
renderer.setResolution(300);
renderer.setAntialiasing(SimpleRenderer.OPTION_ANTIALIASING_HIGH);
LOGGER.warning("IT STOPS HERE!!");
List<Image> images = renderer.render(document); // this is the line in which the execution of the program stops..
LOGGER.warning("pdf pages are: " + images.size());
for (int i = 0; i < images.size(); i++) {
Image img = images.get(i);
Image scaledImg = img.getScaledInstance(1200, -1, Image.SCALE_SMOOTH);
BufferedImage newImage = new BufferedImage(scaledImg.getWidth(null), scaledImg.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(scaledImg, 0, 0, null);
g.dispose();
String extension = ".png";
String imgName = commonPath + (i + 1) + extension;
LOGGER.warning("creating img n: " + (i+1) + " - creating img in folder: " + imgName);
ImageIO.write((RenderedImage) newImage, "png", new File(imgName));
}
LOGGER.warning("finished creating images!");
} catch(FileNotFoundException e){
LOGGER.warning("ERROR DOCUMENT SERVICE -- FileNotFoundException");
LOGGER.warning(e.printStackTrace());
} catch (IOException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- IOException");
LOGGER.warning(e.printStackTrace());
} catch (RendererException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- RendererException");
LOGGER.warning(e.printStackTrace());
} catch (DocumentException e) {
LOGGER.warning("ERROR DOCUMENT SERVICE -- DocumentException");
LOGGER.warning(e.printStackTrace());
} catch (Exception e){
LOGGER.warning("ERROR DOCUMENT SERVICE -- Exception");
LOGGER.warning(e.printStackTrace());
}
}
最后我自己找到了解决办法。
这个问题与 log4j 没有任何关系,但它没有工作,因为它在服务器上缺少 Ghostscript。
在服务器上安装 Ghostscript 后,一切正常。