unixodbc-使用Log4cxx日志输出至MySQL, 无法找到驱动错误

问题描述

使用Log4cxx日志输出至MySQL, 无法找到驱动错误

Hi, guys!
用log4cxx日志框架对log内容输出至数据库(MySQL)一直未成功,不知道是什么步骤出现了问题。希望大伙们能帮帮忙,或者有什么更好的日志系统可以推荐,谢谢各位了。 ^_^


运行环境: Ubuntu 12.04 32bit + Eclipse CDT
log4cxx : apache-log4cxx-0.10.0
log4cxx支持两种ODBC选项(iODBC/unixODBC),这里选择了unixODBC形式进行管理
通过添加选项 ./configure --with-ODBC=unixODBC,编译通过.
之后对unixODBC的驱动和数据源进行配置,可以通过终端 isql log4cxx 成功建立连接
但是代码中使用Log4cxx进行输出的时候一直报下面的错误

log4cxx: Failed to connect to database. - [unixODBC][Driver Manager]Data source name not found, and no default driver specified

怀疑一:

Ecplise中是否没有加环境变量;
查阅ODBC资料,在Eclipse中加入ODBCSYSINI,ODBCINSTINI,ODBCINI变量后,还是没有效果.

怀疑二:

log4cxx配置写的不对;这个有没有什么官方的写法,晕呐!


配置内容:
/etc/odbcinst.ini

[MySQL]
Description = MySQL
Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1

/etc/odbc.ini

[log4cxx]
Description = The Database for Logging System
Trace = on
TraceFile = stderr
Driver = MySQL
SERVER = localhost
PORT = 3306
DATABASE = log
USER = root
PASSWORD = 56789

log4cxx.xml

<appender name="OdbcMysqlAppender" class="org.apache.log4j.odbc.ODBCAppender">
  <param name="URL"
      value="Driver={MySQL};Server=localhost;Database=log;User=root;Password=56789;" />
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern"
          value="INSERT INTO logs (message) VALUES ('%d - %c - %p - %m')" />
  </layout>
</appender>

<root>
  <priority value="all" />
    <appender-ref ref="OdbcMysqlAppender" />
</root>

进展: _Time: 20150702_

查看Log4cxx源码,采用数据库方式记录Log,使用的是ODBCAppender src/main/cpp/odbcappender.cpp 作者原先的代码采用的是 SQLxxxW() 进行DriverConnect和SQLExecDirect操作,根据ODBC的描述,有 W 修饰是采用Unicode编码方式。总之我一直陷在这,一直报找不到数据源。于是乎我将 SQLxxxW() 修改成 SQLxxx() 方式的调用,同时将原先SQLWCHAR 修改成对应 SQLCHAR,即采用非宽字节的操作方式,成功的找到数据源,并且可以进行调用。
不过这就导致了中文的问题了.

疑惑
在odbcinst.ini中配置的Driver确实是libmyodbc5w.so,即驱动使用Unicode方式的呀! (*与之相对应的是libmyodbc5a.so*). 至今还不知道自己是哪里出错,作者不可能毫无依据的就采用 SQLxxxW() 形式进行ODBC连接的吧.


我在ODBCAppender.cpp中添加了
#define SQL_WCHART_CONVERT,否则make的时候过不去, 即

#if !defined(LOG4CXX)
#define LOG4CXX 1
#endif
#include <log4cxx/private/log4cxx_private.h>
#if LOG4CXX_HAVE_ODBC
#if defined(WIN32) || defined(_WIN32)
#include <windows.h>
#endif
#define SQL_WCHART_CONVERT
#include <sqlext.h>
#endif

解决方案

配置中的数据库连接字符串是否正确

时间: 2024-10-03 19:30:35

unixodbc-使用Log4cxx日志输出至MySQL, 无法找到驱动错误的相关文章

【原创】日志输出到串口设备导致的问题

问题场景:       测试人员报告,业务 modb 作为 RabbitMQ 的消费者,消费消息的速度非常慢,慢到大约每秒 2 条左右,从而导致 RabbitMQ 的队列中积压了 4000+ 条消息.  排查过程:       先通过 top 命令定位一下  [root@upucore_1 ~]# top -Hp 8177 top - 09:50:33 up 34 min, 8 users, load average: 4.76, 4.32, 3.65 Tasks: 2 total, 0 run

使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析_java

Log4j组件构成  Log4j由三个重要的组件构成: 1.日志信息的优先级(Logger) 2.日志信息的输出目的地(Appender) 3.日志信息的输出格式(Layout). 概要: 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度: 日志信息的输出目的地指定了日志将打印到控制台还是文件中: 而输出格式则控制了日志信息的显示内容. Log4j介绍 Log4j是 Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信

Log4j输出到mysql数据库

问题描述 Log4j输出到mysql数据库 用MDC.put()将值放进去,再使用log.info()触发.但是触发前总会有一行空白的字段自动添加进去.这是什么原因?怎么设置自定义级别呢?就是当我想输出到数据库就输出,不想就不输出,应该怎么写呢? 解决方案 http://blog.csdn.net/yaerfeng/article/details/18151339 解决方案二: http://xialiang19851204.blog.163.com/blog/static/3720773520

rsyslog日志存储到mysql数据库中并利用loganalyzer进行web图形化分析管理

系统日志的重要性,相信大家都深有体会,当发生故障后,第一时间就是查看相关报错信息和日志信息,以定位问题所在,还可以基于日志,进行日志的分析,从而获取系统运行状态的一些规律,本篇就介绍关于系统日志的先关内容,具体分为: 1.rsyslog相关概念的介绍 2.自定义日志存储的信道(facility)和存储位置,让rsyslog作为服务端记录rsyslog客户端的日志信息 3.定义rsyslog的日志存储在mysql数据库中 4.利用loganalyzer实现对存储在mysql数据库中的rsyslog

idea+maven导入web项目后,tomcat无报错,无日志输出,启动失败,求大神!

问题描述 idea+maven导入web项目后,tomcat无报错,无日志输出,启动失败,求大神! 模块之间的依赖关系可以从这个pom中看出来 把这三个子模块的编译结果都输出到platform的webappWEB-INFclasses,所依赖的jar包通过Maven也输出到webappWEB-INFlib, 然后tomcate 这样配置的 然后启动tomcate 无报错 无log 直接停止,真的太诡异了! 大神们,帮帮忙!太感谢了!!! 解决方案 用IDEA启动非maven管理的web项目 解决

log4j 高手请教 多账户多日志输出

问题描述 有个交易系统,账户定义文件不定多个,格式相同,账号密码等内容不同有个class是处理交易的,每个实例处理一个账户的交易问题:如何让这个class根据账户的不同,把日志输出到账户专用的日志文件中去?因为账户定义文件允许新增删除,所以希望log4j的配置也是动态的,尽量不要写死请把class中的相关设定代码和log4j配置文件的相关设置分别说明一下,多谢了 解决方案 解决方案二:ding..........................解决方案三:我也顶起吧..坐等楼下的答案了...解决

logback打印日志输出到不同文件

问题描述 logback打印日志输出到不同文件 用logback打印日志,想把同一个日志打印成两份一样的,两份文件生成了,但是,只有第一份文件有日志信息,而第二份没有...这是怎么回事?

Tomcat控制台日志输出到文件

startup.bat中修改 call "%EXECUTABLE%" start %CMD_LINE_ARGS% 为 call "%EXECUTABLE%" run %CMD_LINE_ARGS%  (>> ..\logs\detailLog.%DATE:~0,10%.log )   这样控制台就不会输出日志文件了,让catalina.bat去决定日志输出在哪里吧 在catalina.bat中 寻找以%ACTION%结尾的四处,每处%ACTION%后面添

log4j 与ssh框架日志输出问题

问题描述 log4j 与ssh框架日志输出问题 log4j我知道是日志软件,但我现在想不明白的是项目中加了log4j,然后在log4j配置文件中写它的输出格式,我的项目是ssh框架,spring,struts2输出的日志是按照log4j的格式输出,为什么hibernate没有??还有我就是想问这三大框架的日志也是log4j输出的吗 解决方案 log4j日志框架log4j日志问题Spring MVC框架配置log4j输出日志到文件 解决方案二: Hibernate本身可能也需要单独配置一次.