从Openshift部署的Java应用程序中的Log4j

时间:2018-08-22 16:06:08

标签: java log4j openshift

我已经用Java编写了一个应用程序,在docker上使用指定卷的dockerfile构建了映像,并在openshift上使用了该映像。 我已经在openshift上部署了该映像,并且应用程序运行良好,但是如果我尝试使用log4j编写日志文件或一般文件,则会出错。

我已经在Linux环境中编写和测试的另一个应用程序中使用了相同的代码(log4j),但是在将图像部署到openshift上时它工作得很好,我得到以下错误:

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: ./logs/OneViewConsumer.log (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
    at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:207)
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
    at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.ja                                                                  va:648)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:52                                                                  6)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
    at org.apache.log4j.Logger.getLogger(Logger.java:104)
    at it.poste.ov.serviceConsumerToMongo.infrastructure.LogManager.initLogger(LogManager.                                                                  java:87)
    at it.poste.ov.serviceConsumerToMongo.infrastructure.LogManager.instantiateLogManager(                                                                  LogManager.java:54)
    at it.poste.ov.serviceConsumerToMongo.ServiceConsumerToMongoApplication.main(ServiceCo                                                                  nsumerToMongoApplication.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:4                                                                  3)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

我还尝试通过以下简单代码编写文件:

PrintWriter writer;
writer = new PrintWriter("giacomo.txt", "UTF-8");
writer.println("The first line");
writer.close();

我收到此错误:

java.io.FileNotFoundException: giacomo.txt (Permission denied)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.PrintWriter.<init>(PrintWriter.java:192)
    at java.io.PrintWriter.<init>(PrintWriter.java:232)
    at it.poste.ov.serviceConsumerToMongo.ServiceConsumerToMongoApplication.main(ServiceCo                                                                  nsumerToMongoApplication.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:4                                                                  3)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

我有什么要注意的吗?在部署映像时需要设置一些配置,例如docker(--volume)? 另外,我可以看到已部署的Pod日志

oc logs <pod_name>

但是有没有办法找到该日志的物理存储位置?

0 个答案:

没有答案