在使用WebLogic提供的HTTP访问的扩展日志功能时,碰到一个很头疼的事情,就是HTTP访问并没有实时写入access.log,给我的感觉是,访问了n次WebLogic应用,access.log就是不更新,不过如果不停的刷新访问,access.log会时不时地更新一把,或者就是停止WebLogic时,也会把过往的访问都写到access.log中,很不靠谱啊,直接导致测试应用时抓狂。
google了多次,没有找到什么靠谱地解决办法,其实事后看没搜到是因为没有使对关键字。那Oracle的产品,就MetaLink上搜吧,还真找到了。
先说原因:WebLogic在纪录HTTP访问时使用缓冲技术,WebLogic每隔LogFileFlushSecs秒(默认60秒),会检查一下该缓存是否满(默认8KB),该缓存大小由LogFileMBean的属性LogFileBufferKBytes所定义。WebLogic使用缓冲技术主要是为了提高性能,生产环境中访问量巨大,自然会实时更新日志,推荐保持默认配置,而手工测试时,一个人点来点去的,自然不会很快满8KB的缓存,access.log也就不会实时更新了。
再说解决方法:
方法一、使用weblogic.Admin更改
setdomainenv.cmd
java weblogic.Admin -url t3://127.0.0.1:7001 -username %username% -password %password% SET -type WebServerLog -property BufferSizeKB 0
上述命令序列将修改config.xml,使得WebLogic Server的WebServer日志定义中包含将属性buffer-size-kb定义为0,如下所示:
<server>
<name>AdminServer</name>
<web-server>
<web-server-log>
... ...
<buffer-size-kb>0</buffer-size-kb>
... ...
</web-server-log>
</web-server>
... ...
</server>
修改完毕后,重启该WebLogic Server则该配置生效。
方法二、使用WLST方式更改
执行setDomainEnv.cmd(/.sh)
执行java weblogic.WLST将开始WLST命令
wls:/offline> connect('user_name','password','t3://localhost:7001')
wls:/wl_server/serverConfig> edit()
wls:/wl_server/edit !> startEdit()
wls:/wl_server/edit !> cd('Servers/<server_name>/WebServer/<server_name>/WebServerLog/<server_name>')
wls:/wl_server/edit/Servers/<server_name>/WebServer/<server_name>/WebServerLog/<server_name> !> set('BufferSizeKB',0)
wls:/wl_server/edit/Servers/<server_name>/WebServer/<server_name>/WebServerLog/<server_name> !> save()
wls:/wl_server/edit/Servers/<server_name>/WebServer/<server_name>/WebServerLog/<server_name> !> activate()
上述命令序列将修改config.xml,使得WebLogic Server的WebServer日志定义中包含将属性buffer-size-kb定义为0,如下所示:
<server>
<name>AdminServer</name>
<web-server>
<web-server-log>
... ...
<buffer-size-kb>0</buffer-size-kb>
... ...
</web-server-log>
</web-server>
... ...
</server>
修改完毕后,重启该WebLogic Server则该配置生效。
方法三:手工修改config.xml
手工添加关于buffer-size-kb的定义,但必须修改该WebLogic Server的启动命令,添加Java Option,使Java不再验证config.xml,具体如下:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.configuration.schemaValidationEnabled=false
否则,无法正常启动该WebLogic Server,将报错如下:
<Critical> <WebLogicServer> <BEA-000362> <Server failed. Reason: [Management:141245]Schema Validation Error in C:\Oracle\Middleware\WLS10.3\user_projects\domains\base_domain\config\config.xml see log for details. Schema validation can be disabled by starting the server with the command line option: -Dweblogic.configuration.schemaValidationEnabled=false>
不推荐使用该方法
--转自