在Tomcat 与weblogic 中的 日志(log4j) 配置系列二(weblogic 应用程序使用log4j)
来源:互联网 发布:数车车外螺纹m20x2编程 编辑:程序博客网 时间:2024/06/04 18:41
前言
在Tomcat 与weblogic 中的 日志(log4j) 配置系列一
在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中?这里仅仅使用log4j, 而不使用 commons-logging, 关于log4j 和commons-logging的区别和关联,请参考
java 日志技术汇总(log4j , Commons-logging,.....)
一个web 项目实例
这个实例很简单,就是定义一个servlet, 用来写日志
1. 使用eclipse 创建一个动态web 项目, 导入log4j.jar 包
2. 创建一个servlet 类
/** * @author oscar999 * @date 2013-7-31 * @version V1.0 */package com.oscar999;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class LogServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void service(HttpServletRequest req, HttpServletResponse res) {testLog4j();try {PrintWriter out = res.getWriter();out.println("<Hr><h1>Please check the Logs Are generated in .log or Not .....");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void testLog4j() {Logger log = Logger.getLogger(LogServlet.class);PropertyConfigurator.configure("log4j.properties");log.debug("Debug info.");log.info("Info info");log.warn("Warn info");log.error("Error info");log.fatal("Fatal info");}}
3. 在web.xml 中添加servlet 配置
<?xml version="1.0" encoding="UTF-8"?><!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>logTestApp</display-name> <servlet> <servlet-name>LogServlet</servlet-name> <servlet-class>com.oscar999.LogServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>LogServlet</servlet-name> <url-pattern>/logServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list></web-app>
4. 编写一个 log4j.properties 文件
log4j.rootLogger=debug,stdout,logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=logfile.loglog4j.appender.logfile.MaxFileSize=512KBlog4j.appender.logfile.MaxBackupIndex=3log4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
5. 把log4j.properties文件放入 user_projects\domains\base_domain 下。(base_domain是这里使用的domain name, 如果domain name 不一样,应该知道要怎么做了)
因为上面servlet 中,读取log4j 的配置是 PropertyConfigurator.configure("log4j.properties");
这样就直接到 base_domain的路径下去找log4j.properties。
在log4j.properties配置产生的日志文件 logfile.log默认也会放到 base_domain目录下,
也可以修改, 建议是可以放到 “base_domain\servers\AdminServer\logs” 这个目录下。
6. 接下来通过 http://localhost:8080/appname/servletname
访问就可以了
使用应用程序中的log4j.properties
在上面的例子中, 我们使用了base domain 的根路径来放置log4j.properties .难道说就没有办法读到应用程序中的log4j?
我们知道,
在Tomcat 中,可以在servlet 中通过 getServletContext().getRealPath("/"); 得到路径;weblogic 部署时不解压war 档,所以没有办法读到相应的路径。
但是可以通过getServletContext().getResourceAsStream(file) 这个方法获取路径。
(至于这个方法是直接取war 档里的文件,还是取 base_domain\servers\AdminServer\tmp\_WL_user 中对应的缓存文件就没有深究了).
这里的例子是:
先通过一个servlet 设置log4j 的相关配置(配置文件),在应用启动时就甚至好, 后面的调用就不再需要 设置这个了PropertyConfigurator.configure("log4j.properties"); 。
这里把 log4j.properties 放置在/WEB-INF/log4j.properties 路径下(如果放置在src下, 需确认打包时是否把这个文件放进了war 的classes 路径下)
实现的步骤如下:
1. 在web.xml 配置设置log4j 初始化的servlet.
<servlet> <servlet-name>log4jLoader</servlet-name> <servlet-class>com.oscar999.Log4jInit</servlet-class> <init-param> <param-name>log4j</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>
2. 把log4j.properties放入/WEB-INF 路径下
3. 完成com.oscar999.Log4jInit.java 的servlet, 设置log4j
/** * @author oscar999 * @date 2013-8-2 * @version V1.0 */package com.oscar999;import java.io.IOException;import java.util.Properties;import javax.servlet.http.HttpServlet;import org.apache.log4j.PropertyConfigurator;public class Log4jInit extends HttpServlet {/** * */private static final long serialVersionUID = 1L;public void init(){//1. apache tomcat use /** * * String prefix =getServletContext().getRealPath("/"); * * String file = getInitParameter("log4j"); * * System.out.println("................set log4j start"); * * if(file != null) { * * PropertyConfigurator.configure(prefix+file); * } * *///2. weblogic useString logCfgFile = getInitParameter("log4j");System.out.println("==========set log4j start");if(logCfgFile!=null){Properties ps= new Properties();try{ps.load(getServletContext().getResourceAsStream(logCfgFile));}catch(IOException e){e.printStackTrace();}PropertyConfigurator.configure(ps);}}}
4 测试的servlet 改成如下方式:
/** * @author oscar999 * @date 2013-7-31 * @version V1.0 */package com.oscar999;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class LogServlet extends HttpServlet {// static Log log = LogFactory.getLog(LogServlet.class);/** * */private static final long serialVersionUID = 1L;public void service(HttpServletRequest req, HttpServletResponse res) {// testLog4j();testLog4jByResourceStream();try {PrintWriter out = res.getWriter();out.println("<Hr><h1>Please check the Logs Are generated in .log or Not .....");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void testLog4jByResourceStream() {Logger log = Logger.getLogger(LogServlet.class);log.debug("Debug info By Resource Stream.");log.info("Info info By Resource Stream");log.warn("Warn info By Resource Stream");log.error("Error info By Resource Stream");log.fatal("Fatal info By Resource Stream");}}
如此, 就不需要往base domain 路径放 .properties 文件了。
- 在Tomcat 与weblogic 中的 日志(log4j) 配置系列二(weblogic 应用程序使用log4j)
- 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一
- 在Tomcat 与weblogic 中的 日志(log4j) 配置系列三(log文件的存放路径)
- log4j在weblogic中配置
- weblogic 无法生成log4j日志
- Weblogic部署项目打印log4j日志问题
- tomcat日志配置之二log4j
- WebLogic Portal学习系列之二:在WebLogic中配置和使用第三方LDAP Server
- Tomcat log4j 日志配置
- tomcat配置log4j日志
- 在tomcat中用log4j配置日志系统
- Tomcat 使用Log4j日志。
- log4j日志配置(二)
- Weblogic 12c中配置log4j
- log4j使用心得之二 -- log4j配置相对路径日志
- Log4j中的日志配置
- log4j在tomcat 和 工程中的配置
- log4j在tomcat 和 工程中的配置
- sql 表运算符的理解
- debug 中各标记位
- iOS ARC tips
- 学生信息管理系统 那些事儿(一)
- Object... values 的含义
- 在Tomcat 与weblogic 中的 日志(log4j) 配置系列二(weblogic 应用程序使用log4j)
- Android源码学习之如何使用eclipse+NDK【一】
- 生产者-消费者 BlockingQueue 运用示例
- 解决安装SQLServer2005_SSMSEE.msi错误29506
- 对ComboBox,ListBox,CheckedListBox添加,移除项
- 获取图片链接
- jlink突然不能用了
- HDU 4635 Strongly connected 解题报告
- Effective Java 第14条:在公有类中使用访问方法而非公有域