您现在的位置是:主页 > news > wordpress升级php版本崩溃/南京seo排名优化公司
wordpress升级php版本崩溃/南京seo排名优化公司
admin2025/5/2 20:22:37【news】
简介wordpress升级php版本崩溃,南京seo排名优化公司,河南新乡做网站公司,网站统计平台利用 Spring 与 Log4J 巧妙地进行动态日志配置切换并立即生效 引言:在开发与生产环境中,我们有时候需要对日志的配置进行动态切换,要调试、监控和检查系统的运行时信息。一般有两种方法1、通过 Spring 的 Log4jConfigListener 在启动时开启定…
publicclass Log4jConfigListener implements ServletContextListener { publicvoid contextInitialized(ServletContextEvent event) { Log4jWebConfigurer.initLogging(event.getServletContext()); } publicvoid contextDestroyed(ServletContextEvent event) { Log4jWebConfigurer.shutdownLogging(event.getServletContext()); } } |
private String CLASSPATH = "classpath:"; private String location = CLASSPATH + "log4j.xml"; private String locationRunning = location; privatelongrefreshInterval = 60000; privatelongrefreshSecond = 0; privatelongrefreshMinute = 0; privatelongrefreshHour = 0; privatebooleanrefreshDaemon = false; |
publicinterface ILog4JRefreshInterval { publicvoid init(); // 根据配置信息初始化日志 publicvoid destroy(); // 销毁日志 publicvoid refreshIntervalThread(); // 定时加载日志的配置信息 publicvoid refreshIntervalImmediately(); // 立即加载默认的日志配置信息 publicvoid refreshIntervalImmediatelyByFilePath(String log4jFilePath); // 立即加载指定的日志配置文件 publicvoid refreshIntervalImmediately(boolean isXmlConfig,String log4jConfigInfo); // 立即加载指定的日志配置文件 public String getRunningConfing() throws Exception;//获取正在运行的日志配置信息 } |
</head> <body> <img src="logger.jpg" alt="日志动态配置管理控制台"/> <form action="log4JRefresh.do" method="post"> <p>配置内容:(两者只取其一)</p> <p><input checked type="radio" name="configMethod" onclick="isXmlConfig.disabled=true;log4jConfigInfo.value ='';log4jConfigInfo.disabled=true;log4jFilePath.disabled =false;log4jFilePath.focus();"/>1、Log4J的文件路径,格式如下: <input name="log4jFilePath" ondblclick="this.value='/var/ log4j.properties'" size="100"/></p> <ul> <li>classpath:log4j.properties 或者 classpath:log4j.xml</li> <li>file:C:/log4j.properties 或者 file:C:/log4j.xml</li> <li>C:/log4j.properties 或者 C:/log4j.xml</li> </ul> <p><input type="radio" name="configMethod" onclick="log4jFilePath.value='';log4jFilePath.disabled= true;isXmlConfig.disabled=false;log4jConfigInfo.disabled= false;log4jConfigInfo.focus();"/>2、Log4J的详细配置信息:</p> <p>配置方式: <select name="isXmlConfig"> <option value="0" selected>Property</option> <option value="1">XML</option> </select>(请根据实际的配置内容选择相应的类型)</p> <textarea name="log4jConfigInfo" rows="23" cols="123" ondblclick="this.value=''"> # default.layout.ConversionPattern = %t [%c{3}]-[%-5p]:[%L]:%m%n default.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t] [%c{3}]-[%-5p]:[%L]:%m%n </textarea> <input type="submit" value="提 交"/> <input type="reset" value="重 置"/> </form> <br> <a href="log4JRunning.do" title="查看正在运行的Log4J配置信息。">查看配置信息</a> <a href="log4JRefresh.do" title="立刻重新加载通过配置文件加载的Log4J配置信息。">立刻重新加载</a> <a href="log4JShutdown.do" title="立刻停止Log4J的服务,所有日志关停。">立刻停止日志</a> <a href="HelloServlet" title="调用Servlet来测试Log4J信息是否正常。">测试是否正常</a> </body> </html> |
publicclass HelloServlet extends HttpServlet { privatestaticfinallongserialVersionUID = -4506255419343502640L; privatestaticfinal Logger logger = Logger.getLogger(HelloServlet.class); publicvoid doGet(HttpServletRequest request,HttpServletResponse response) { try { ServletOutputStream out = response.getOutputStream(); out.println("<html xmlns=/"http://www.w3.org/1999/xhtml/">"); out.println("<head>"); out.println("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=GBK/"/>"); out.println("<title>动态配置测试页面</title>"); out.println("<link href=/"facade.css/" rel=/"stylesheet/" type=/"text/css/"/>"); out.println("</head><body>"); out.println("<img src=/"logger.jpg/" alt=/"日志动态配置管理控制台/"/>"); out.println("<p>Begin:" + new Date() + "<br/>"); if(logger.isDebugEnabled()) { logger.debug("DEBUG级别的信息:debugging<p>"); out.println("DEBUG级别的信息:debugging</p>"); } if(logger.isInfoEnabled()) { logger.info("INFO级别的信息:information<p>"); out.println("INFO级别的信息:information</p>"); } logger.warn("warning"); logger.error("error"); logger.fatal("fatal"); out.println("End:" + new Date() + "<br/>"); out.println("<p><a href=/"JavaScript:history.go(-1)/">返 回</a>"); out.println("</p></body></html>"); out.flush(); } catch(IOException e) { e.printStackTrace(); } } } |
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>动态配置操作成功</title> <link href="facade.css" rel="stylesheet" type="text/css"/> </head> <body> <img src="logger.jpg" alt="日志动态配置管理控制台"/> <p> 恭喜:动态配置操作成功! <p> 当前的配置为: <textarea rows="23" cols="123" ReadOnly><%=request.getAttribute("RunningConfig")%></textarea> <p> <a href="JavaScript:history.go(-1)">返 回</a> </body> </html> |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config. PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:LoggerConsole.properties</value> </list> </property> </bean> <bean id="log4JRefreshInterval" class="net.agile.springtime.logger.util.Log4JRefreshInterval" init-method="init" destroy-method="destroy"> <property name="location" value="${logger.log4j.location}"/> <property name="refreshDaemon" value="${logger.log4j.refreshDaemon}"/> <property name="refreshInterval" value="${logger.log4j.refreshInterval}"/> <property name="refreshSecond" value="${logger.log4j.refreshSecond}"/> <property name="refreshMinute" value="${logger.log4j.refreshMinute}"/> <property name="refreshHour" value="${logger.log4j.refreshHour}"/> </bean> </beans> |
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler. SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/log4JRefresh.do">log4JRefreshController</prop> <prop key="/log4JShutdown.do">log4JShutdownController</prop> <prop key="/log4JRunning.do">log4JRunningController</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet. view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="log4JRefreshController" class="net.agile.springtime.logger.web.Log4JRefreshController"> <property name="successView" value="RefreshSuccess"/> <property name="failedView" value="RefreshFailed"/> <property name="log4JRefreshInterval" ref="log4JRefreshInterval"/> </bean> <bean id="log4JShutdownController" class="net.agile.springtime.logger.web.Log4JShutdownController"> <property name="successView" value="RefreshSuccess"/> <property name="failedView" value="RefreshFailed"/> <property name="log4JRefreshInterval" ref="log4JRefreshInterval"/> </bean> <bean id="log4JRunningController" class="net.agile.springtime.logger.web.Log4JRunningController"> <property name="successView" value="RefreshSuccess"/> <property name="failedView" value="RefreshFailed"/> <property name="log4JRefreshInterval" ref="log4JRefreshInterval"/> </bean> </beans> |
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <import resource="beanRefLog4J.xml" /> <import resource="beanRefMVC.xml" /> </beans> |
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Spring Log4J Refresh Web Application</display-name> <description>Spring Log4J Refresh Web Application</description> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beanRefApplication.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>50</load-on-startup> </servlet> <servlet> <servlet-name>HelloServlet</servlet-name> <display-name>HelloServlet</display-name> <servlet-class>net.agile.springtime.logger.web.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> |
1. 启动应用,访问 http://localhost:8080/Log4J_Spring_Web/ 如下图所示
可以选择"Log4J的文件路径"或者直接输入详细的配置文件的"Log4J的详细配置信息"方式进行动态切换
2.查看配置信息
可以查看到当前正在运行的配置信息,如下图:
3.立刻重新加载
可以立即加载默认的日志配置 文件,并返回默认的配置内容,如下图:
4.立刻停止日志
可以立即停止日志,并显示停止前的日志配置信息,如下图:
5.测试是否正常
可通过此测试用的 Servlet 来查看日志是否成功,在重新加载新的配置文件后,建议都调用一下来测试是否切换成功,如下图:
先提交 INFO 等级的配置
然后查看测试的结果信息,如下:
只显示 INFO 级别的信息
更改为 DEBUG级别,并提交,如下:
然后查看测试的结果信息,如下:
五、总结
一个简单的封装与扩展,实现了对日志的配置进行动态切换,调试、监控和检查系统的运行时信息,方便了许多,提升了开发效率。