最近用CXF Webservice写了两个接口(接口访问有IP授权校验),本地测试一点问题没有,但是部署到linux服务器上就一直说IP没有授权,一开始以为是加载ip白名单的路径有问题,定位了半天都没有解决,服务器上也不好定位,无赖之下只好加上日志把信息记录下来,最终发现是ip地址因为路由的原因发生了改变。
说起Log4j都非常熟悉,但之前都是有环境直接用,然而自己配起来发现了好多问题....
下面来分享一下遇到的问题和介绍Log4j的配置。
其实Log4j已经封装的很好了,我们要做的事情就是让它加载我们写好的log4j.xml或者log4j.properties配置文件。
首先创建一个log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 输出日志到控制台 ConsoleAppender -->
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="info"></param>
<layout class="org.apache.log4j.TTCCLayout">
<param name="ConversionPattern" value="TTCCLayout"></param>
</layout>
</appender>
<!-- 输出日志到文件 每天一个文件 -->
<appender name="dayFile"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="info"></param>
<param name="ImmediateFlush" value="true"></param>
<param name="File" value="d:/logs/dayFile.log"></param>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!-- 输出日志到文件 文件大小到达指定尺寸的时候产生一个新的文件 -->
<appender name="File1"
class="org.apache.log4j.RollingFileAppender">
<param name="File" value="d:/logs/File1.log"></param>
<param name="ImmediateFlush" value="true"/>
<param name="Threshold" value="info"></param>
<param name="Append" value="true"></param>
<param name="MaxFileSize" value="30KB"></param>
<param name="MaxBackupIndex" value="100"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!-- 输出日志到文件 -->
<appender name="file"
class="org.apache.log4j.FileAppender">
<param name="File" value="d:/logs/file.log"></param>
<param name="Threshold" value="info"></param>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
</layout>
</appender>
<!--
定义全局的日志输出级别,但是在输出目的地的配置中配置的具体输出级别优先级高于全局定义的优先级。
如果在railyFile中定义<param name="Threshold" value="info"></param>,那么将会把info以上级别的信息输出
-->
<root>
<priority value="debug" />
<appender-ref ref="console" />
<appender-ref ref="dayFile" />
<appender-ref ref="File1" />
<appender-ref ref="file" />
</root>
</log4j:configuration> 有几种生成日志的方式可供选择.. 有了配置文件之后就要加载,先来说一下通过spring的的工具类加载:(这种方式比较简单直接,好处是我们可以将log4j.xml配置文件放到自己想放的目录)
这里要特别强调一下,如果log4j.xml直接放在src的根目录下是不需要在web.xml中配置的,log4j会自动加载,下面的两种方式可以忽略,因为这两种方式就是针对不再src目录下的处理!(个人是比较好奇所以研究了一下)!
在web.xml加入这样的配置
<!-- log4j 系统日志-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/config/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
第二种方式是通过写一个sevlet在web项目启动的时候初始化加载log4j的配置文件,示例如下:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
/**
*
* @author Fangtao
* 初始化加载Log4j配置文件方法
*/
public class Log4jUtil extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j");
if (file != null) {
// 如果配置文件是log4j.properties请使用PropertyConfigurator.configure加载
PropertyConfigurator.configure(prefix + file);
// 如果配置文件是log4jxml请使用DOMConfigurator.configure加载
DOMConfigurator.configure(prefix + file);
}
}
}
/**
* 对应的web.xml的配置
*/
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.huawei.util.Log4jUtil</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/config/log4j.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>这种方法要特别主要加载的方式,主要看你的配置文件是properties还是xml,我之前就被这个坑过,特别注意!
// 如果配置文件是log4j.properties请使用PropertyConfigurator.configure加载
PropertyConfigurator.configure(配置文件路径);
// 如果配置文件是log4jxml请使用DOMConfigurator.configure加载
DOMConfigurator.configure(配置文件路径);
在使用CXF Webservice的IP授权校验时遇到问题,通过添加Log4j日志记录发现问题在于IP地址因路由变化。本文分享Log4j配置的详细过程,包括创建log4j.xml配置文件,以及通过Spring工具类、web.xml配置和Servlet初始化加载配置文件的三种方式。
3997

被折叠的 条评论
为什么被折叠?



