weblogic下war包发布的项目中log4j的使用

本文介绍了一种在WebLogic服务器上部署WAR包时,解决Log4j配置问题的方法。通过自定义Log4j初始化类和使用ServletContext.getResourceAsStream()方法,确保Log4j可以在不同部署环境下正确加载配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 网上可以找到的log4j的嵌入方式有2种:

1、将log4j.properties放在classpath中,一般是web-inf/classes下,缺点的缺乏灵活性

2、可以通过log4j的com.apache.jakarta.log4j.Log4jInit类,Spring的 org.springframework.web.util.Log4jConfigServlet和 org.springframework.web.util.ServletContextListener来进行嵌入。

 

如果项目是以war包形式发布到weblogic中时方法2将会遇到问题。war包在weblogic中是不会自动展开的,这一点与tommcat不一样,换句话说,你就不能通过绝对路径来得到资源,而要以另一种形式ServletContext.getResourceAsStream()来进行读取。方法2中说到的几个类都是先取到文件的绝对路径然后再来读取,在weblogic启动的时候会出现错误

Cannot set web app root system property when WAR file is not expanded。

那么只好自己来进行初始化了


下面的就是新鲜出炉的log4j初始化类和web.xml文件中的配置

 

  1. package util;
  2. import java.io.IOException;
  3. import java.util.Properties;
  4. import javax.servlet.http.HttpServlet;
  5. import org.apache.log4j.PropertyConfigurator;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class Log4jInit extends HttpServlet {
  9.     public void init() {
  10.         /**
  11.          * apache中的调用方法
  12.          * String prefix =getServletContext().getRealPath("/");
  13.          * 
  14.          * String file = getInitParameter("log4j");
  15.          *  // if the log4j-init-file is not set, then no point in trying
  16.          * 
  17.          * System.out.println("................log4j start");
  18.          * 
  19.          * if(file != null) {
  20.          * 
  21.          * PropertyConfigurator.configure(prefix+file);
  22.          *  }
  23.          * 
  24.          */
  25.         String file = getInitParameter("log4j");        
  26.         System.out.println("................log4j start");
  27.         if (file != null) {
  28.             Properties ps=new Properties();
  29.             try {
  30.                 ps.load(getServletContext().getResourceAsStream(file));
  31.             } catch (IOException e) {
  32.                 e.printStackTrace();
  33.             }
  34.             PropertyConfigurator.configure(ps);
  35.         }
  1.     <servlet>
  2.         <servlet-name>log4jLoader</servlet-name>
  3.         <servlet-class>util.Log4jInit</servlet-class>
  4.         <init-param>
  5.             <param-name>log4j</param-name>
  6.             <param-value>/WEB-INF/log4j.properties</param-value>
  7.         </init-param>
  8.         <load-on-startup>0</load-on-startup>
  9.     </servlet>

下面的话摘自网上:

那么,现在对于war应用可以成功运行,但如果现在不通过war部署,直接通过目录结构部署应用会不会又出现找不到资源的错误呢?请来看看ServletContext.getResourceAsStream的API文档,

Returns a URL to the resource that is mapped to a specified path. The path must begin with a "/" and is interpreted as relative to the current context root. 
This method allows the servlet container to make a resource available to servlets from any source. Resources can be located on a local or remote file system, in a database, or in a .war file. 

可见,通过getResourceAsStream可以获取包括本地文件系统、远程文件系统、war包等资源。不会出现上面担心的问题。

结论:在开发J2EE Web应用时,如果需要读取本应用中的文件,尽量使用ServletContext.getResourceAsStream进行,而不要使用文件IO。

<think>我们正在解决IntelliJIDEA中使用WebLogic部署项目时无法打开的问题。用户可能遇到了在IDEA中配置WebLogic服务器后,部署项目但无法在浏览器中打开应用的情况。我们需要系统地排查可能的原因。常见原因括:1.WebLogic服务器未正确启动或配置2.项目部署失败或未部署3.网络配置问题(如端口、主机名等)4.防火墙或安全软件阻止5.项目本身的问题(如启动异常)我们将按照以下步骤进行排查:步骤1:检查WebLogic服务器状态-确保WebLogic服务器已成功启动。在IDEA的“Services”工具窗口中,查看WebLogic服务器的状态。如果状态为停止,尝试启动它。-查看控制台输出,确认没有启动错误。常见错误括端口占用、配置错误等。步骤2:检查项目部署状态-在WebLogic控制台(通常通过http://localhost:7001/console访问)中,检查应用是否已部署且状态为“Active”。-如果未部署,尝试在IDEA中重新部署:运行配置中选择“Deploy”操作。步骤3:验证部署URL-在WebLogic控制台中,找到部署的应用,查看其上下文根(ContextRoot)和完整的访问URL。-尝试在浏览器中直接访问该URL(如http://localhost:7001/myapp)。步骤4:检查端口和主机配置-确认WebLogic监听端口(默认为7001)是否正确,并在浏览器中使用相同的端口。-如果使用自定义端口,请确保在IDEA的运行配置中正确设置。步骤5:检查防火墙设置-确保防火墙允许浏览器访问WebLogic端口(7001)。步骤6:检查项目日志-查看WebLogic的服务器日志(位于域目录下的servers/AdminServer/logs/AdminServer.log)和项目应用日志,寻找异常信息。步骤7:检查IDEA配置-在IDEA中,打开运行/调试配置,确保WebLogic服务器配置正确,特别是域目录、JDK路径等。-确保部署的工件(Artifact)正确,例如WAR或爆炸目录。步骤8:尝试简单应用-创建一个简单的Web应用(如一个index.html)并部署,以确定是项目问题还是环境问题。如果以上步骤无法解决问题,请提供更具体的错误信息。相关问题:1.如何在IntelliJIDEA中配置WebLogic服务器?2.WebLogic服务器启动时遇到端口冲突怎么办?3.如何在WebLogic中查看部署的应用?4.如何修改WebLogic的监听端口?5.如何查看WebLogic的日志文件?</think>### IntelliJ IDEA WebLogic 部署项目无法打开的排查指南 当在 IntelliJ IDEA 中使用 WebLogic 部署项目后无法打开时,请按以下步骤系统排查: --- #### **1. 验证 WebLogic 服务器状态** - **检查控制台输出**:在 IDEA 的 `Run` 或 `Services` 工具窗口查看 WebLogic 启动日志,确认无报错且出现 `Server state changed to RUNNING` 提示[^1]。 - **手动访问管理控制台**:浏览器访问 `http://localhost:7001/console`,验证 WebLogic 是否独立启动成功。 #### **2. 检查部署状态** - **查看部署日志**:在 WebLogic 控制台的 `Deployments` 页面,检查项目状态是否为 `Active`。 - **验证上下文路径**: 在部署配置中确认上下文路径(Context Root),例如: ```xml <weblogic-web-app> <context-root>/myapp</context-root> </weblogic-web-app> ``` 访问 URL 应为:`http://localhost:7001/myapp` #### **3. 端口与防火墙排查** - **端口冲突检测**: ```bash netstat -ano | findstr :7001 # Windows lsof -i :7001 # Linux/Mac ``` 若端口被占用,修改 `domain/config/config.xml` 中的 `<listen-port>`。 - **关闭防火墙**:临时禁用系统防火墙测试是否拦截请求。 #### **4. 项目配置检查** - **部署工件验证**:在 IDEA 的 `Run/Debug Configurations` 中: 1. 确认 `Deployment` 选项卡已添加正确工件(WAR/Exploded) 2. 检查 `Server` 选项卡的域路径是否匹配实际 WebLogic 域 - **热部署冲突**:尝试取消勾选 `Run/Debug Configurations → Server → After launch` 中的热部署选项。 #### **5. 日志深度分析** - **WebLogic 日志**:检查域目录下的日志文件: ``` user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log ``` - **应用日志**:查看项目自身的日志文件(如 `logs/app.log`),定位启动异常。 #### **6. 最小化测试** 创建仅含 `index.html` 的测试项目部署,验证基础功能: ```html <!-- index.html --> <html><body><h1>WebLogic Test</h1></body></html> ``` 若测试项目可访问,则原项目可能存在代码或依赖问题。 #### **7. 环境重置** 1. 清理 WebLogic 缓存:删除 `domain/servers/AdminServer/tmp` 和 `cache` 目录 2. 在 IDEA 中执行 `Build → Rebuild Project` 3. 重启 WebLogic 服务器 --- ### 常见问题解决方案 | 问题现象 | 解决方法 | |---------|----------| | 404 错误 | 检查上下文路径或部署文件完整性 | | 503 服务不可用 | 查看日志确认应用是否启动超时 | | 控制台可访问但应用无法打开 | 验证防火墙规则和端口绑定 | | 部署后自动取消部署 | 检查 `config.xml` 中的 `<admin-mode>false</admin-mode>` | --- ### 相关问题 1. 如何在 IntelliJ IDEA 中配置 WebLogic 服务器域路径? 2. WebLogic 部署时出现 "Deployment Failed" 错误如何解决? 3. 如何修改 WebLogic 的默认监听端口? 4. 为什么 WebLogic 控制台可以访问但部署的应用无法打开? 5. 如何查看 WebLogic 的详细启动日志? [^1]: 典型成功日志含 `WebLogic Server started.` 和 `Server state changed to RUNNING` 关键信息,表明服务已就绪。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值