#java #log4j
#java #log4j
Вопрос:
Я реализовал ведение журнала log4j в своем приложении JSF.Мой файл log4j.properties выглядит следующим образом
log4j.rootLogger=DEBUG, stdout, fileout
#----------------------------- All logging to console-----------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] [%t] %5p %c{1}:%L - %m%n
# ------------------------------ All Logging to File------------------------------
log4j.appender.fileout = org.apache.log4j.RollingFileAppender
log4j.appender.fileout.layout = org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern = [%d] [%t] %5p %c{1}:%L - %m%n
log4j.appender.fileout.File = ${catalina.home}/logs/Portal-alllogs.log
log4j.appender.fileout.MaxFileSize =2MB
log4j.appender.fileout.MaxBackupIndex =2
Теперь я получаю следующее исключение в своем приложении, потому что база данных не работает
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-01034: ORACLE not available
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:361)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:485)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
WARNING: Failed to register in JMX: javax.naming.NamingException: Cannot create PoolableConnectionFactory (ORA-01034: ORACLE not available
Проблема в том, что указанное выше исключение отображается в catalina.out, но не в моем файле журнала
Кто-нибудь, пожалуйста, может объяснить, почему? Заранее спасибо
Обновление: я просто вижу этот журнал при развертывании файла WAR
WARNING: Unexpected exception resolving reference
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098)
at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350)
at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:156)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:826)
at org.apache.naming.NamingContext.lookup(NamingContext.java:145)
at org.apache.naming.NamingContext.lookup(NamingContext.java:814)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1021)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1021)
at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:631)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:237)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:379)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:324)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
Ответ №1:
Вы уверены, что исключение действительно ЗАРЕГИСТРИРОВАНО в stdout, а не просто напечатано в stdout? Можете ли вы определить шаблон преобразования, работающий с тем, что вы получаете на свою консоль?
Комментарии:
1. Я обновил свой вопрос. При загрузке самой моей войны я получаю вышеупомянутое исключение.
2. Я все еще не вижу, что он использует «log4j.appender.стандартный вывод. макет. ConversionPattern=[%d] [%t] %5p %c{1}:%L — %m%n». На вашем месте я бы попытался сначала убедиться, что веб-приложение правильно развертывается и запускается, и беспокоиться о регистрации позже.
3. Это потому, что во время загрузки WAR я получаю исключение, я не вижу его в файле журнала?
4. Это было бы моим предположением, да. Как вы «загружаете войну»?
5. Я получил свою ошибку. На самом деле я делал
e.printStackTrace
вместоLOGGER.debug("Exception",e)
. Я изменил его. Теперь я вижу свой журнал в файле журнала. Спасибо за помощь.
Ответ №2:
Возможно, проблема с разрешениями — проверьте владельцев и разрешения каталога ${catalina.home}/logs.
Комментарии:
1. Спасибо за ответ. Все права доступа к папке -rw-r—- в каталоге logs. Весь оставшийся журнал отображается как в файле, так и в catalina.out.но мое исключение не отображается в моем файле журнала
Ответ №3:
Вы улавливаете это исключение в своем коде и обрабатываете его, то есть регистрируете? Если нет, то почему вы ожидаете, что он появится в вашем журнале?
Комментарии:
1. @bpgergo-Я использую пул соединений tomcat в своем приложении, и я объявил это в своем context.xml моего приложения. Но теперь, поскольку моя база данных не работает, это исключение генерируется. Я перехватываю это исключение, но в журнале я не вижу свой java-файл, из которого он выбрасывается.
Ответ №4:
Если это не проблема с разрешениями: убедитесь, что $ {catalina.home} решается так, как вы думаете, — попробуйте использовать «необработанный» абсолютный путь, чтобы исключить это.
Комментарии:
1. @PapaFreud-Спасибо за ответ.$ {catalina.home} решается правильно, потому что я могу видеть свои файлы журнала только в каталоге $ {catalina.home} /logs