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>
时间: 2024-12-20 17:43:41

log4j 路径环境变量配置和log4j加载配置的相关文章

ExtJS4.2 仅需配置URL动态加载GridPanel列(带分页)

最近做ExtJS一直想做个傻瓜式的GridPanel,今天折腾了一天,从GitHub找到的老外写的解决方案, 在他的基础上做了一些改动,增加了分页,增加了columns手动配置(原本只能动态生成),大家有兴趣可以自由扩展,我做了很详细的注释 效果图如下,仅需在html页面引入ext.all,并创建自定义控件,配置url即可创建带分页效果的GirdPanel 代码: 效果图: 一.动态加载自定义控件 自定义脚本包括两部分:DynamicGrid.js和DynamicReader.js 将Ext目录

vue-loader 配置了css加载器属性。

module: { loaders: [ // 这里也是相应的配置,test就是匹配文件,loader是加载器, { test: /\.vue$/, loader: 'vue' }, { test: /\.js$/, loader: 'babel', include: projectRoot, exclude: /node_modules/ }, { test: /\.json$/, loader: 'json' }, /* { test: /\.css$/, //这是注释掉的模块,一开始很疑惑

webdriver 启动chrome时加载配置

Selenium操作浏览器是不加载任何配置的,网上找了半天,关于Firefox加载配置的多点,Chrome资料很少,下面是关于加载Chrome配置的方法:  一.加载所有Chrome配置 用Chrome地址栏输入chrome://version/,查看自己的"个人资料路径",然后在浏览器启动时,调用这个配置文件,代码如下: #coding=utf-8 from selenium import webdriver option = webdriver.ChromeOptions() op

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 通过读取Config文件的配置例如: Map<String, String> group = ConfigurationManager.GetConfiguration("config1"); this.setBcp

6.Sentinel源码分析—Sentinel是如何动态加载配置限流的?

Sentinel源码解析系列: 1.Sentinel源码分析-FlowRuleManager加载规则做了什么? 2. Sentinel源码分析-Sentinel是如何进行流量统计的? 3. Sentinel源码分析- QPS流量控制是如何实现的? 4.Sentinel源码分析- Sentinel是如何做到降级的? 5.Sentinel源码分析-Sentinel如何实现自适应限流? 有时候我们做限流的时候并不想直接写死在代码里面,然后每次要改规则,或者增加规则的时候只能去重启应用来解决.而是希望能

nginx windows下重新加载配置

运行过程中,有个节点部分服务出现故障,像将其下线修复, 使用nginx -t; nginx -s reload 重新加载配置 得到错误"nginx: [error] OpenEvent("Global\ngx_reload_1868") failed (5: Access is denied)" 原因是 nginx 作为windows 服务在运行,安全性问题,不能执行 使用 psexec 执行这段,

此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库

警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared-libraries  选项设置为true, 或删除 -runtime-shared-libraries 选项. 通过修改FlashBuilder4\Adobe Flash Builder 4\sdks\4.0.0\frameworks  下的flex-config.xml,将 <static-li

nginx 启动,停止和重新加载配置

nginx 启动,停止和重新加载配置 要启动nginx的,运行可执行文件.一旦nginx的启动时,它可以通过与-s参数调用可执行来控制.使用以下语法 nginx -s signal 其中,信号可以是下列之一: stop — fast shutdown quit — graceful shutdown reload — reloading the configuration file reopen — reopening the log files 在配置文件中所作的更改不会被应用,直到命令重新配

007-spring cloud gateway-GatewayAutoConfiguration核心配置-RouteDefinition初始化加载

一.RouteDefinitionLocator 在Spring-Cloud-Gateway的GatewayAutoConfiguration初始化加载中会加载RouteDefinitionLocator(路由定义信息加载器)信息. //初始化配置路由定义加载器 @Bean @ConditionalOnMissingBean public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator(GatewayProper