无法在 DuplicateKeyException 上解析符号 'logger'

Cannot resolve symbol 'logger' on DuplicateKeyException

简而言之:与许多教程不同,对象 "logger" 无法识别。

问题本身不是很严重,我可以轻松解决。然而,看到这个 "logger" 在我的 intellIj 编辑器中保持红色是非常令人沮丧的。我正在浏览文档和博客,但看不出问题所在。

我的片段:

@Override
public void insertTicketStatut(TicketStatut pTicketStatut) {
    String vSQL = "INSERT INTO statut {id, libelle} VALUES {:id, :libelle}";

    BeanPropertySqlParameterSource vParams = new BeanPropertySqlParameterSource(pTicketStatut);
    NamedParameterJdbcTemplate vJdbcTemplate = new NamedParameterJdbcTemplate(getDataSource());

    try {
        vJdbcTemplate.update(vSQL, vParams);
    } catch (DuplicateKeyException pE){
        logger.error("Le TicketStatut existe déjà ! id="+ pTicketStatut.getId(),pE);
    }
}

将鼠标悬停在记录器上显示“无法解析符号 'logger' 感谢您的帮助。

记录器需要实例化或更好地注入。看来你没有那样做。当您使用某种日志记录框架(如 log4j)时,初始化将如下所示:

static Logger logger = Logger.getLogger(MainApp.class.getName());

当您向我们展示完整内容时 class 我们可以看到更多细节并且可以更好地猜测。

可以找到 log4j 和 spring 的教程 here

推荐使用sl4j

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

然后实例化:

//generic way to declare logger to be able to copy/paste to other classes
//without changing the class name
private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

在依赖项中,包括 sl4j 实现的绑定(可以是 log4j)。

可以参考这里:

logging-with-slf4j

确实,我没有正确管理我的进口:

我补充道:

    private final Log logger = LogFactory.getLog(TicketDaoImpl.class);

来自

org.apache.commons.logging.Log;

愚蠢的缺乏关注。

我也在看 Baeldung 上 log4j/sl4j 的文档。谢谢^^