2019-10-31 1543 星期四 enAn
说明
1. 重写的 Log4jFile extends RollingFileAppender
2. Log4jFile.java 中的格式化类型与log4j.properties中的输出的文件目录一致 log4j.appender.logFile.File=${
log.home.dir}/yyyy/MM/dd/web.log
3. 指向自己重写的类 log4j.appender.logFile=com.ecommerce.platform.common.log.Log4jFile
4. 另外log4j.properties中
log4j.rootLogger的变量logFile,必需与log4j.appender.logFile=com.ecommerce.platform.common.log.Log4jFile保持一致,不然不会输出日志
5.监听器,把变量设置到环境中 [设置到系统属性集 ]java.util.Properties
System.out.println(className + "[设置到系统属性集 ]");
props.setProperty(InitConstant.DUBBO_REGISTRY_APPLICATION, dubbo_registry_application);//dubbo注册的应用名字
props.setProperty(InitConstant.DUBBO_REGISTRY_ADDRESS,dubbo_registry_address);//dubbo:注册地址
props.setProperty(InitConstant.DUBBO_CATALINA_HOME, dubbo_catalina_home);//dubbo缓存文件位置
props.setProperty(InitConstant.LOG_HOME_DIR, log_dir);//log日志文件位置
**
log4j.properties和spring-mvc.xml,取监听器中设置的值
**
log4j.properties 设置值
log4j.appender.logFile.File=${
log.home.dir}/yyyy/MM/dd/web.log
spring-mvc.xml 设置值
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="#{systemProperties['dubbo.registry.application']}" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="#{systemProperties['dubbo.registry.address']}" file="#{systemProperties['dubbo.catalina.home']}"/>
log4j.properties配置文件内容
log4j.rootLogger=INFO,DEBUG,console,logFile,ERROR
## 控制台,begin ##
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %-5p [%t] %c.%M(%L) - %m%n
## 控制台,end ##
### 输出到控制台,begin ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
### 输出到控制台,end ###
### 日志文件设置,begin ###
log4j.appender.logFile=com.ecommerce.platform.common.log.Log4jFile
#输出DEBUG级别日志到文件中
log4j.appender.logFile.Threshold=debug
log4j.appender.logFile.File=${log.home.dir}/yyyy/MM/dd/web.log
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.appender.logFile.MaxFileSize=50MB
### 日志文件设置,end ###
## 指定dao输出sql ##
# 打印sql语句:debug; 执行结果:trace ##
## 指定mapper配置文件中的namespace ##
## (log4j.logger.包名)原因是mybatis设置日志打印级别为TRACE即可输出sql文及sql参数和结果集。 ##
### sql ,begin ###
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
## ********************************* ##
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout
## ********************************* ##
log4j.logger.jdbc.sqlonly=OFF
log4j.logger.jdbc.sqltiming=OFF
log4j.logger.jdbc.audit=OFF
log4j.logger.jdbc.resultset=OFF
log4j.logger.jdbc.connection=OFF
### sql ,end ###
把监听器加放web.xml中
<!-- 自定义监听器,加载指定属性文件中的内容 -->
<listener>
<listener-class>com.ecommerce.platform.listener.InitSystemConfigListener</listener-class>
</listener>
监听器
package com.ecommerce.platform.listener;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.ecommerce.platform.common.constant.InitConstant;
import com.ecommerce.platform.common.exception.CommonConfigException;
import com.ecommerce.platform.common.util.LoadProperties;
import com.ecommerce.platform.common.util.PropertiesUtil;
/**
* .::::.
* .::::::::.
* ::::::::::: I && YOU
* ..:::::::::::'
* '::::::::::::'
* .::::::::::
* '::::::::::::::..
* ..::::::::::::.
* ``::::::::::::::::
* ::::``:::::::::' .:::.
* ::::' ':::::' .::::::::.
* .::::' :::: .:::::::'::::.
* .:::' ::::: .:::::::::' ':::::.
* .::' :::::.:::::::::' ':::::.
* .::' ::::::::::::::' ``::::.
* ...::: ::::::::::::' ``::.
* ````':. ':::::::::' ::::..
* '.:::::' ':'````..
* 自定义监听器,加载属性文件中定义的变量值,在web.xml中使用,特别是配置log4j的值
* @author enAn,2019-07-22
* 参考:https://blog.csdn.net/liufunan/article/details/50715167
*/
public class InitSystemConfigListener implements ServletContextListener {
public static final String className = "初始化-自定义监听器[InitSystemConfigListener]...";
public void contextDestroyed(ServletContextEvent sce) {
System.out.println(className + "web exit ... ");
}
public void contextInitialized(ServletContextEvent sce) {
try {
Map<String, String> initPropertiesData = PropertiesUtil.getInitProperties();
String log_dir = "";
String dubbo_catalina_home = "";
System.out.println(className + "init");
Properties props= System.getProperties(); //获得系统属性集
String os = props.getProperty