首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JDBC appender存储json值

如何使用JDBC appender存储json值
EN

Stack Overflow用户
提问于 2022-01-26 17:49:55
回答 1查看 135关注 0票数 1

我想使用Log4j 2通过JDBC存储一个JSON字段。这是我的配置,我无法存储到PostgreSQL JSON类型列中:

代码语言:javascript
复制
<Configuration status="WARN">
    <Appenders>
        <JDBC name="databaseAppender" tableName="logs.logs">
            <ConnectionFactory
                class="eu.dedalus.phaedra.log.appender.ConnectionFactory"
                method="getDatabaseConnection" />
            <Column name="id" literal="nextval('logs.logs_id_seq')" />
            <Column name="date" isEventTimestamp="true" />
            <Column name="level" pattern="%level" isUnicode="false" />
            ...
            <Column name="data" ??? />
        </JDBC>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="databaseAppender" />
        </Root>
    </Loggers>
</Configuration>

这是我在PostgreSQL中的元表定义:

代码语言:javascript
复制
CREATE TABLE logs (
    id int4 NOT NULL,
    message varchar NULL,
    fullinfo varchar NULL,
    "level" varchar NULL,
    ...
    "data" json NULL,
    CONSTRAINT id_logs PRIMARY KEY (id)
);

我的MapMessage代码填充了一个ExtendedLogger,然后调用了ExtendedLogger的info方法:

代码语言:javascript
复制
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ExtendedLogger log = ctx.getLogger(clazz.getName());
MapMessage map = new MapMessage();
... // put all other data into MapMessage
map.put("data", new JSONObject()) // or JsonNode, String or whatever else
log.info(map);

如何使用JDBC的PostgreSQL ConnectionFactory将“数据”字段存储到JDBC列中?是否可以使用Log4j 2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-27 13:32:04

您可以使用"columnMapping“标记,而不是支持”参数“属性的”列“,在该属性中,可以使用'?‘插入表达式。作为标记并向json添加一个强制转换。就你而言:

代码语言:javascript
复制
<ColumnMapping name="data" pattern="%K{data}" parameter="?::json" />

或者,如果数据可以是空的,它可以使用合并来检查它。它必须组合到NULLIF,因为默认情况下,未定义键的K返回一个空字符串。

代码语言:javascript
复制
<ColumnMapping name="data" pattern="%K{data}" parameter="COALESCE(NULLIF(?,''),'[]')::json" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70868018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档