2013-12-04 3 views
2

я получаю исключение Java SQL всякий раз, когда я пытаюсь запустить log4j2 с Appender JDBCSQL Exception с log4j2

2013-12-03 22:07:32,610 ERROR No matching driver found for database URL [jdbc:mysql://localhost:3306/minecraft]. java.sql.SQLException: No suitable driver 
     at java.sql.DriverManager.getDriver(DriverManager.java:278) 
     at org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.createConnectionSource(DriverManagerConnectionSource.java:88) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:841) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:595) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:587) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:587) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.doConfigure(BaseConfiguration.java:244) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.start(BaseConfiguration.java:142) 
     at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:339) 
     at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:378) 
     at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:149) 
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:85) 
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:34) 
     at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:387) 
     at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:322) 
     at net.minecraft.server.MinecraftServer.<clinit>(SourceFile:47) 

2013-12-03 22:07:32,617 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.db.jdbc.JDBCAppender for element JDBC java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:841) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:595) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:587) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.doConfigure(BaseConfiguration.java:244) 
     at org.apache.logging.log4j.core.config.BaseConfiguration.start(BaseConfiguration.java:142) 
     at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:339) 
     at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:378) 
     at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:149) 
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:85) 
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:34) 
     at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:387) 
     at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:322) 
     at net.minecraft.server.MinecraftServer.<clinit>(SourceFile:47) 
Caused by: java.lang.NullPointerException 
     at org.apache.logging.log4j.core.appender.db.jdbc.JDBCAppender.createAppender(JDBCAppender.java:80) 
     ... 17 more 

2013-12-03 22:07:32,619 ERROR Null object returned for JDBC in Appenders 
2013-12-03 22:07:32,625 ERROR Unable to locate appender databaseAppender for logger 

мой путь к классам

$ echo $CLASSPATH 
.:/home/user/minecraft/mysql-jdbc.5.1.23.jar 

А вот содержимое конфигурации log4j2 XML файл Я использую

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
     <Appenders> 

       <Console name="console" target="SYSTEM_OUT"> 
         <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%level] %msg%n" /> 
       </Console> 

       <RollingFile name="rolling_server_log" fileName="logs/server.log" 
           filePattern="logs/server_%d{yyyy-MM-dd}-%i.log.gz"> 
         <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%level] %msg%n" /> 
         <Policies> 
           <TimeBasedTriggeringPolicy /> 
         </Policies> 
       </RollingFile> 

       <JDBC name="databaseAppender" tableName="minecraft"> 
         <DriverManager url="jdbc:mysql://localhost:3306/minecraft" username="xxxx" password="xxxx" /> 
         <Column name="eventDate" isEventTimestamp="true" /> 
         <Column name="level" pattern="%level" /> 
         <Column name="logger" pattern="%logger" /> 
         <Column name="message" pattern="%message" /> 
       </JDBC> 

     </Appenders> 
     <Loggers> 
       <Root level="info"> 
         <AppenderRef ref="rolling_server_log" /> 
         <AppenderRef ref="console" /> 
         <AppenderRef ref="databaseAppender"/> 
       </Root> 
     </Loggers> 
</Configuration> 

Я очень новичок в установке JDBC/интеграции log4j2. Есть ли какой-то шаг конфигурации, который мне не хватает?

ответ

1

Похож на проблему с классом. Предполагая, что команда, запускающая ваше приложение, выглядит примерно так: «java -cp jar1.jar: jar2.jar: jar3.jar myMainClass», вы пытались включить класс драйвера jdbc в список баннеров?

+0

Это было! В случае, если кому-то интересно, я начал его с 'java -Dlog4j.configurationFile = log4j2.xml -cp minecraft_server.1.7.2.jar: mysql-connector-java-5.1.23-bin.jar net.minecraft.server.MinecraftServer' – napentathol

+1

Банки, указанные в -cp ... части команды _override_ глобального пути к классам. Таким образом, ваше приложение не может видеть ничего, что отсутствует в списке -cp. –

0

У вас есть ошибка в вашем CLASSPATH.

Переменная CLASSPATH это один из способов сказать приложений, в том числе JDK инструментов, где искать классы пользователей.

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

Итак, ваш CLASSPATH должен быть только /home/user/minecraft/. Просто убедитесь, что ящик драйвера находится в этом каталоге.