log4j 路径环境变量配置和log4j加载配置

1.lo4j日志路径从环境变量读取,log4j.xml配置如下:

复制代码
具体配置如下:
log4j.appender.R.Encoding=UTF-8
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.Append=true
#log4j.appender.R.Threshold=INFO
log4j.appender.R.File=${log4j.home}/logs/log.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n
复制代码

1.1 监听配置web.xml

  <listener>
      <listener-class>com.jumper.logview.servlet.Log4jlistener</listener-class>  
  </listener>
  

1.2 监听代码

复制代码
public class Log4jlistener implements ServletContextListener {
    final static String LOG4J_HOME = "log4j.home";
    final static String ENV_HOME = "LOG4J_HOME";
        
    public void contextDestroyed(ServletContextEvent servletcontextevent) {
        System.getProperties().remove(LOG4J_HOME);
    }
    
    public void contextInitialized(ServletContextEvent servletcontextevent) {
        String logsHome = System.getenv(ENV_HOME);
        if(logsHome == null){
            logsHome = System.getProperty("catalina.home")+"/log4j";
        }
System.out.println("*********log4j dir:"+logsHome);        
        System.setProperty(LOG4J_HOME, logsHome);
    }
}
复制代码

2.log4j 加载的两种方式

2.1采用spring加载配置

复制代码
     <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/config/log4j.properties</param-value>
    </context-param>
    <!-- Spring刷新Log4j配置文件变动的间隔,单位为毫秒 -->
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>1000000</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
复制代码

2.2采用serlvet加载

复制代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void destroy() {
        super.destroy();
    }

    public Log4jInit() {
        super();
    }

    /**
     * Initialization of the servlet. <br>
     * 
     * @throws ServletException
     *             if an error occurs
     */
    public void init() throws ServletException {
        String file = this.getInitParameter("log4j");// 从web.xml配置读取,名字一定要和web.xml配置一致
        if (file != null) {
            PropertyConfigurator.configure(this.getServletContext().getRealPath(file));        
        }
    }
}


web.xml配置:
<servlet>
  <servlet-name>Log4jInit</servlet-name>
  <servlet-class>com.jumper.log4j.Log4jInit</servlet-class>
  <init-param>
   <param-name>log4j</param-name>//这个是名字是下边路径配置的标识(好像KEY一样)
   <param-value>/WEB-INF/classes/config/log4j.properties</param-value>//这是容器初始化时候加载log4j配置文件的路径(这好像一个value);
  </init-param>
  <load-on-startup>1</load-on-startup> 
 </servlet>
复制代码

 

posted on   xunianchong  阅读(10853)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示