WebLogic access.log X-Forwarded-For日志配置优化问询
WebLogic Access Log 配置问题解决方案
需求1:X-Forwarded-For为空时填充c-ip
WebLogic原生的access log格式字符串不支持直接的条件判断逻辑,没法在格式行里直接写"如果X-Forwarded-For为空就用c-ip"的规则。要实现这个需求,你需要通过自定义日志处理逻辑来实现:
- 编写一个Java类,实现
weblogic.servlet.logging.FormatStringInterface接口,在format方法里判断请求的X-Forwarded-For头是否为空:- 如果不为空,返回头值;
- 如果为空,返回请求的客户端IP(对应c-ip的值)。
- 把编译好的类打包成JAR,放到WebLogic的
domain/lib目录下。 - 在config.xml的
<access-log>配置块中,替换原来的格式字段为自定义类的引用,比如:
这里的<access-log> <format-string>%my.custom.XForwardedForOrIpFormatter% c-ip date time time-taken cs-method cs-uri sc-status bytes</format-string> </access-log>%my.custom.XForwardedForOrIpFormatter%对应你自定义的格式器类全限定名。
需求2:去除X-Forwarded-For值的引号包裹
如果需求1没法实现,要去掉引号有两个可行方案:
方案1:关闭请求头转义
在config.xml的<access-log>标签下添加<escape-headers>false</escape-headers>配置,关闭WebLogic对请求头值的引号转义:
<access-log> <format-string>cs(X-Forwarded-For) c-ip date time time-taken cs-method cs-uri sc-status bytes</format-string> <escape-headers>false</escape-headers> </access-log>
这个配置会让WebLogic直接输出请求头的原始值,不会自动添加引号。注意该设置会影响所有cs(header-name)字段的输出,若其他头字段需要保留转义需谨慎使用。
方案2:改用Apache风格日志格式
WebLogic支持使用Apache兼容的日志格式,这种格式下用%{X-Forwarded-For}i获取头值不会添加引号。修改config.xml的<access-log>配置为:
<access-log> <format-type>apache</format-type> <format-string>%{X-Forwarded-For}i %h %t %D "%r" %s %b</format-string> </access-log>
这里的%h对应c-ip,%t对应日期时间,%D对应time-taken(毫秒),%r对应cs-method和cs-uri,%s对应sc-status,%b对应bytes,你可以根据自身需求调整格式字符串。
内容的提问来源于stack exchange,提问作者Dynamic
相关产品推荐
相关产品推荐

