You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Liferay DXP 7.2的mvc-portlet中使用slf4j替代内置日志

Liferay DXP 7.2 MVC-Portlet 替换默认日志为SLF4J实现方案

1. 依赖调整(pom.xml配置)

首先排除Liferay默认日志接口依赖,引入SLF4J相关依赖,示例配置如下:

<dependencies>
    <!-- 排除Liferay内核默认日志依赖 -->
    <dependency>
        <groupId>com.liferay.portal</groupId>
        <artifactId>com.liferay.portal.kernel</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.util.bridges</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>com.liferay.portal</groupId>
                <artifactId>com.liferay.portal.kernel.log</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- 引入SLF4J依赖,Liferay平台已自带,scope设为provided即可 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
        <scope>provided</scope>
    </dependency>
    <!-- Commons Logging桥接至SLF4J,兼容原有依赖的日志输出 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.30</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. BND文件配置(屏蔽默认日志导入)

修改模块根目录下的bnd.bnd文件,添加如下配置,避免OSGi容器导入Liferay默认日志接口:

Bundle-Name: 你的Portlet显示名称
Bundle-SymbolicName: 你的Portlet唯一标识
Bundle-Version: 1.0.0
Export-Package: 按需填写导出的包,无则留空
# 核心配置:排除Liferay默认日志包导入
Import-Package: \
    !com.liferay.portal.kernel.log,\
    *
-sources: true

3. 关闭Liferay默认日志相关配置

  • 关闭默认XML日志输出:在Liferay根目录portal-ext.properties文件中添加配置
log.config.xml.enabled=false
  • 禁用Portlet默认日志输出:登录Liferay后台,进入控制面板→配置→系统设置→基础→日志级别,找到你的Portlet对应包名,将原有Liferay日志实现的级别调整为OFF,新增SLF4J对应包的日志级别为所需级别(INFO/DEBUG等)

4. 代码使用示例

直接在MVC Portlet类中调用SLF4J API即可,示例如下:

import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import java.io.IOException;

@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.header-portlet-css=/css/main.css",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=DemoSlf4jPortlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.name=DemoSlf4jPortlet",
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)
public class DemoSlf4jPortlet extends MVCPortlet {
    // 初始化SLF4J日志实例
    private static final Logger LOGGER = LoggerFactory.getLogger(DemoSlf4jPortlet.class);

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
        // 不同级别日志使用示例
        LOGGER.debug("调试日志:进入doView方法");
        LOGGER.info("信息日志:Portlet被访问,会话ID:{}", renderRequest.getPortletSession().getId());
        if(LOGGER.isWarnEnabled()){
            LOGGER.warn("警告日志:演示警告输出");
        }
        try {
            // 业务逻辑
        } catch (Exception e) {
            LOGGER.error("错误日志:业务执行异常", e);
        }
        super.doView(renderRequest, renderResponse);
    }
}

注意事项

  • 不要自行引入SLF4J的具体实现(如logback、log4j2),Liferay平台已提供统一的日志实现,自行引入会导致类冲突
  • 日志级别调整优先通过Liferay后台系统设置配置,无需额外添加日志配置文件到Portlet模块
  • 如果依赖的第三方工具包使用了其他日志接口,可引入对应桥接包(如log4j-over-slf4j、jul-to-slf4j)统一输出到SLF4J

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:27:01