通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql

说一下配置:

服务器weblogic

项目使用的是spring管理Bean,数据源配置也是基于Spring的dbcp数据源,并且用log4jdbc进行sql日志打印,采用logback+slf4j日志打印。log4jdbc能够很好打印sql,并且参数也带上了,这在项目开发与后期系统出现的问题查找原因都有很大的帮助。

数据库配置如下:

jdbc.driverClassName=net.sf.log4jdbc.DriverSpy

jdbc.url=jdbc:oracle:thin:@ip:port/dev

jdbc.username=user

jdbc.password=pwd

spring配置如下:

<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">

<property name="targetDataSource">

<ref local="mainDataSource"/>

</property>

</bean>

<bean id="mainDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="${jdbc.driverClassName}"  />

<property name="url" value="${jdbc.url}"  />

<property name="username" value="${jdbc.username}"  />

<property name="password" value="${jdbc.password}"  />

<property name="initialSize" value="30"  />

<property name="logAbandoned" value="true"  />

<property name="maxActive" value="100"  />

<property name="maxWait" value="310000" />

<property name="minIdle" value="2" />

<property name="maxOpenPreparedStatements" value="500" />

<property name="removeAbandoned" value="true"/>

<property name="removeAbandonedTimeout" value="300"/>

<property name="poolPreparedStatements" value="false" />

<property name="defaultAutoCommit" value="true" />

</bean>

在项目后期,客户要求不能使用项目配置的数据源,要使用weblogic的数据源。客户为大,就这么改了,改了后,log4jdbc的sql再也打印不出来了。

这是weblogic数据源的配置:

之前项目中有sql打印,log4jdbc也能打印出sql执行的参数,这样就能大概知道项目执行情况。没有了sql后,如果出了问题,不好定位问题,因此为了打印出sql进行了测试。

spring配置改为如下:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<value>lmsDatasource</value>

</property>

<property name="resourceRef">

<value>false</value>

</property>

<property name="jndiEnvironment">

<props>

<!-- The value of Context.PROVIDER_URL,这是配置weblogic的url,如t3://127.0.0.1:7001 -->

<prop key="java.naming.provider.url">t3://ip:weblogicport</prop>

<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>

</props>

</property>

</bean>

weblogic数据源改为如下配置:

加载该驱动,需要用到如下几个jar包:

log4jdbc3-1.2beta2.jar

logback-classic-1.1.1.jar

logback-core-1.1.1.jar

slf4j-api-1.6.4.jar

并且weblogic启动时要加载这几个jar包。

在有篇文章中(http://blog.csdn.net/yjq8116/article/details/4498622)看到说直接将jar放到{domain_home}/lib中,会自动加载第三方jar包。但是我这样做了并没有生效。将jar包放在{wls_home}/server/lib下也没有生效,放在jdk目录加载第三方jar包的路径:{java_home}/jre/lib/ext,这个可以加载到了,但是这样会对本地的所有java程序都生效,会影响到其他项目的,因此不应该放在该目录下。

还要继续想办法,为什么明明weblogic自己也说了可以自动加载{domain_home}/lib下的jar,却没有加载了,百思不得其解。

后来在weblogic的启动日志中看到如下片段:

这个是weblogic加载第三方jar包的path配置,但是并没有发现该路径。在{domain_home}/bin/setDomainEnv.sh中看到了

这个weblogic.ext.dirs正是weblogic的console中加载的classPath。因此,想到可以直接手动添加此路径,这样就可以让weblogic在启动时加载第三方jar包了。

这是修改后的,变量${DOMAIN_HOME}的该文件之前,weblogic已有的定义。

修改后,启动weblogic,在{domain_home}执行命令:nohup ./startWebLogic.sh >./logs/weblogic"`date +%Y%m%d%H%M`".log 2>&1 &

启动,发现console打印出了很多日志,都是DEBUG级别的(关于LOG的级别,项目中用到的是logback,大家可以查找相关资料),这是最低的级别,所有的日志都会输出,显然这样的输出对我们来说并没有多大的意义,而且还影响系统性能。

但是,日志的打印,是根据自定义的格式进行打印的,为什么weblogic会打印这样的配置,而且还是debug级别的?后来在网上查到关于weblogic的日志配置问题,查到了这篇文章:http://bbs.middleware123.com/forum.php?mod=viewthread&tid=4532,上面说可以配置命令

set LOG4J_CONFIG_FILE=/root/bea/user_projects/domains/MedRecDomain/log4jConfig.xml

来配置log4j的文件(logback跟log4j都是日志系统,具体区别可以查找相关资料)。还真在setDomainEnv.sh文件找找到了这个配置:

我想对于程序员,虽然不了解shell,但是看到这个也大概知道这个意思吧,如果有变量:LOG4J_CONFIG_FILE,就加到JAVA_PROPERTIES中,我也不知道这个JAVA_PROPERTIES是干嘛的,但是改一下,或许有效果。突然觉得对于这个weblogic,真的很多都只能去动手试。增加了如下配置:

下面是我logback.xml的主要配置

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

<configuration>

<!-- log output to file  -->

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>logs/weblogiclog.txt</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<!-- rollover daily -->

<fileNamePattern>logs/weblogiclog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>

<maxHistory>10</maxHistory>

<timeBasedFileNamingAndTriggeringPolicy

class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

<!-- or whenever the file size reaches 100MB -->

<maxFileSize>500MB</maxFileSize>

</timeBasedFileNamingAndTriggeringPolicy>

</rollingPolicy>

<encoder>

<!--<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  -->

<pattern>%d{yy/MM/dd HH:mm:ss} %5level [%C{1}.%M\(%L\)] %m%n</pattern>

</encoder>

</appender>

<!-- log output to console  -->

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

<!--<pattern>%date %5level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  -->

<!-- only show method name and line no

<pattern>%d{yy/MM/dd HH:mm:ss} %5level [%C{1}.%M\(%L\)] %m%n</pattern> -->

<!-- show method caller-->

<pattern>%d{yy/MM/dd HH:mm:ss} %5level %caller{1} - %msg%n</pattern>

</encoder>

</appender>

<logger name="com.sinoservices" level="ERROR" additivity="false">

<appender-ref ref="STDOUT" />

</logger>

<logger name="jdbc.sqlonly" level="INFO">

<!--  增加sql打印控制台 -->

<appender-ref ref="STDOUT" />

<appender-ref ref="STDOUT" />

</logger>

<logger name="jdbc.sqltiming" level="OFF">

<appender-ref ref="ROLLING" />

</logger>

<logger name="jdbc.audit" level="OFF">

<appender-ref ref="ROLLING" />

</logger>

<logger name="jdbc.resultset" level="OFF">

<appender-ref ref="ROLLING" />

</logger>

<logger name="jdbc.connection" level="OFF">

<appender-ref ref="ROLLING" />

</logger>

<root level="INFO">

<appender-ref ref="ROLLING" />

</root>

</configuration>

下面是最终weblogic的console截图,打印日志的记录确实同我的配置的logback.xml的一致,也能打印sql参数了,并且之前在{domain_home}/logs/目录没有出现logs/weblogiclog.txt的滚动日志,现在也有了。弄了好久,总算弄出来了:

其实在项目中也有logback的配置,配置的logger appender是:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>logs/log.txt</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<!-- rollover daily -->

<fileNamePattern>logs/log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>

<maxHistory>10</maxHistory>

<timeBasedFileNamingAndTriggeringPolicy

class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

<!-- or whenever the file size reaches 100MB -->

<maxFileSize>500MB</maxFileSize>

</timeBasedFileNamingAndTriggeringPolicy>

</rollingPolicy>

<encoder>

<!--<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  -->

<pattern>%d{yy/MM/dd HH:mm:ss} %5level [%C{1}.%M\(%L\)] %m%n</pattern>

</encoder>

</appender>

后面又测试了一下,发现,weblogic的logback配置只能放在该domain下。并且如果直接放在domain目录下,也是可以不需要LOG4J_CONFIG_FILE配置。又试了几次放在其他目录的,发现起不到效果,不知道是不是只能放在domain目录下。

但是并没有生成项目中使用的配置,没有生成log.txt文件。这个之前是可以生成的,在改了这样的数据源之后,就不出来了,不知道是不是由于weblogic本身已经支持对logback的支持了,因此就将项目中的logback所配置的进行了屏蔽呢?

时间: 2024-10-19 03:11:43

通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql的相关文章

SpringBoot Mybatis项目中的多数据源支持

1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 2.建数据源 首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据 CREATE TABLE `groupidinfo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `groupId` varchar(255) DEFAULT NULL, `versio

软件开发的目录规范/定制程序的入口/引用配置文件/引用自定义模块/logging模块/日志继承与propagate属性/通过字典导入配置/日志模块在项目中的使用

02.软件开发的目录规范单独的文件放单独的东西py文件src 程序的核心有关setting 配置有关common 常用功能的集合体 文件夹lib 库log 日志conf 配置文件有关的db 数据有关的文件夹bin 整个程序的入口放启动文件core 里面写主逻辑=====================read me 解释说明文件夹里面做什么 原文地址:https://www.cnblogs.com/wangmiaolu/p/8734561.html

Spring Boot项目中如何定制PropertyEditors

本文首发于个人网站:Spring Boot项目中如何定制PropertyEditors 在Spring Boot: 定制HTTP消息转换器一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据,实际上,在一次请求的完成过程中还发生了其他的转换,我们这次关注将参数转换成多种类型的对象,如:字符串转换成Date对象或字符串转换成Integer对象. 在编写控制器中的action方法时,Spring允许我们使用具体的数据类型定义函数签名,这是通过PropertyEditor实现的.Propert

Spring Boot项目中如何定制拦截器

本文首发于个人网站:Spring Boot项目中如何定制拦截器 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供HandlerInterceptor(拦截器)工具.根据文档,HandlerInterceptor的功能跟过滤器类似,但拦截器提供更精细的控制能力:在request被响应之前.request被响应之后.视图渲染之前以及request全部结束之后.我们不能通过拦截器修改request内容,但是可以通过抛出异

在Spring Boot项目中使用Spock测试框架

摘自:https://www.cnblogs.com/javaadu/p/11748473.html 本文首发于个人网站:在Spring Boot项目中使用Spock测试框架 Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目中使用该框架写优雅.高效以及DSL化的测试用例.Spock通过@RunWith注解与JUnit框架协同使用,另外,Spock也可以和Mockito(Spring Boot应用的测试——Mockito

weblogic配置JNDI数据源

因项目需要使用多数据源,因此要使用JNDI方式去配置,在此留下操作步骤. # 启动Admin Server Console #登录到管理系统选择数据源节点 #新建数据源 #配置数据源信息 * 上面那个设置数据源名称 * JNDI名称和数据源名称可以相同也可以不相同,建议按照jdbc.XXX这种格式创建(测试时使用myname名字有点问题) * 数据库选择对应类型即可 #选择数据库驱动 这个可以随便选择一个,后面可以修改 #这一步直接下一步 #配置数据源信息 #测数据源链接 #部署数据源,点击完成

WebLogic使用总结(三)——WebLogic配置JNDI数据源

一.在WebLogic新建针对Oracle数据库的JNDI数据源 进入weblogic管理控制台,此处是远程访问:http://192.168.1.144:7001/console 点击左侧[ 域结构]→[base domain]→[服务]→[数据源] 然后点击右侧[新建]→[般数据源],如下图所示: 填写JDBC数据源的[名称].[jndi名称],选择数据库类型,如选择[oracle],下一步 选择Oracle数据库的驱动程序,如下图所示: 这里选择[Oracle' s Driver (Thi

SpringSide 3 中的多数据源配置的问题

在SpringSide 3 中,白衣提供的预先配置好的环境非常有利于用户进行快速开发,但是同时也会为扩展带来一些困难.最直接的例子就是关于在项目中使用多个数据源的问题,似乎很难搞.在上一篇中,我探讨了SpringSide 3 中的数据访问层,在这一篇中,我立志要解决多数据源配置的难题,我的思路是这样的: 第一步.测试能否配置多个DataSource第二步.测试能否配置多个SessionFactory第三步.测试能否配置多个TransactionManager第四步.测试能否使用多个Transac

weblogic配置jdbc数据源

weblogic配置jdbc数据源的过程 方法/步骤 启动weblogic 管理服务器,使用管理用户登录weblogic管理控制台   打开管理控制台后,在左侧的树形域结构中,选择服务->数据源. 在右侧的窗口中,选择 新建->一般数据源   填写数据源名称,JNDI名,选择数据库类型(本文以Oracle数据库为例) 点击下一步按钮   选择数据库驱动程序,点击下一步按钮   事务处理选项画面,点击 下一步 按钮   新建JDBC数据源画面 数据库名称 主机名 端口号 数据库用户名 密码 用于