Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4j2 JDBC Appender";无法写入数据库时出错";带弹簧靴_Java_Spring Boot_Jdbc_Log4j - Fatal编程技术网

Java Log4j2 JDBC Appender";无法写入数据库时出错";带弹簧靴

Java Log4j2 JDBC Appender";无法写入数据库时出错";带弹簧靴,java,spring-boot,jdbc,log4j,Java,Spring Boot,Jdbc,Log4j,我有一个Sprint启动应用程序。我想实现Log4j来登录Sql Server。我试过互联网上的每一个例子,但似乎都无法破解 我已经实现了如下。我遇到的问题是,我从Log4j中得到错误: “无法写入数据库时出错” 在我的连接工厂中,我可以看到正在调用getDatabaseConnection()方法。我已通过在其中运行select来验证连接是否有效。但是,当Log4j使用它时,Log4j代码中的connection对象为null,因此它抛出这个错误 --用法-- 公共类MyLogger{ 公共M

我有一个Sprint启动应用程序。我想实现Log4j来登录Sql Server。我试过互联网上的每一个例子,但似乎都无法破解

我已经实现了如下。我遇到的问题是,我从Log4j中得到错误:

“无法写入数据库时出错”

在我的连接工厂中,我可以看到正在调用getDatabaseConnection()方法。我已通过在其中运行select来验证连接是否有效。但是,当Log4j使用它时,Log4j代码中的connection对象为null,因此它抛出这个错误

--用法--

公共类MyLogger{
公共MyLogger(){}
公共静态记录器Logger=LogManager.getLogger(LogManager.ROOT\u Logger\u NAME);
公共静态无效信息(字符串消息){
logger.info(消息);
}
}
--连接工厂--

公共类连接工厂{
私有静态接口单例{
最终ConnectionFactory实例=新的ConnectionFactory();
}
私有最终数据源数据源;
私有静态属性;
静止的{
属性=新属性();
ClassLoader cl=ConnectionFactory.class.getClassLoader();
URL=cl.getResource(“config/application.properties”);
试一试{
load(新文件输入流(url.getPath());
}捕获(IOE异常){
e、 printStackTrace();
}
}
私有连接工厂(){
dataSource=getDataSource();
}
公共数据源getDataSource()
{
字符串logDbServer=properties.getProperty(“logDb.server”);
字符串logDbInstance=properties.getProperty(“logDb.instance”);
字符串logDbDatabase=properties.getProperty(“logDb.database”);
字符串logDbUsername=properties.getProperty(“logDb.username”);
字符串logDbPassword=properties.getProperty(“logDb.password”);
属性=新属性();
setProperty(“用户”,logDbUsername);
setProperty(“密码”,logDbPassword);
GenericObjectPool池=新的GenericObjectPool();
String conn=String.format(“jdbc:sqlserver://%s;instanceName=%s;数据库=%s;加密=false;trustServerCertificate=true;loginTimeout=30;用户=%s;密码=%s”
,logDbServer,logDbInstance,logDbDatabase,logDbUsername,logDbPassword);
DriverManager连接工厂connectionFactory=新的DriverManager连接工厂(连接,属性);
新建PoolableConnectionFactory(connectionFactory,pool,null,“选择1”,
false,false,Connection.TRANSACTION\u READ\u COMMITTED);
PoolgDataSource p=新的PoolgDataSource(池);
返回p;
}
公共静态连接getDatabaseConnection()引发SQLException{
Connection conn=Singleton.INSTANCE.dataSource.getConnection();
返回连接;
}
}
--Log4j.xml--


%d{yyyy-MM-dd HH:MM:ss.SSS}%5p${hostName}-[%15.15t]-40.40c{1.}:%m%n%ex

发生了一件有趣的事情。在花了两个星期的时间之后,我几乎放弃了——但我还是成功了


我决定将Spring Boot升级到最新版本-现在一切正常。我以前一直在使用2.0.3,我刚刚更新到2.2.5。我想可能是该版本的Spring Boot与Log4J一起工作时出现了问题,或者是升级了一些已修复的依赖项。

请发布完整的异常堆栈跟踪。您的用户是否有足够的权限写入数据库?