gpt4 book ai didi

mysql - Log4j2 JPAAppender blob

转载 作者:行者123 更新时间:2023-11-29 18:13:04 25 4
gpt4 key购买 nike

经过 2 天的与 log4j2、hibernate 和 spring 的斗争之后,我终于让 JPAAppender 开始工作了.. 有点......

我按照这个例子:http://logging.apache.org/log4j/2.x/manual/appenders.html#JPAAppender

示例中的类创建一个具有以下结构的表:

CREATE TABLE `applicationLog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`wrappedEvent` tinyblob,
PRIMARY KEY (`id`)
)

第一个问题是我无法记录任何内容,因为tinyblob 太小了。我通过将tinyblob 更改为largeblob 手动修复了此问题。

第一个问题:有没有办法让类扩展BasicLogEventEntity来创建自己的大blob?

第二个问题:如何使用mysql客户端读取wrappedEvent?如何从 blob 中获取日志的纯文本?

谢谢

最佳答案

因此,我按如下方式更改了实体,现在数据库中的 blob 始终为空(我不再需要它),其他列填充了可读信息。这只是一个解决方法,但这是我能想到的最好的方法......

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.db.jpa.BasicLogEventEntity;
import org.hibernate.annotations.Type;

/**
*
* @author syco
*/
@Entity(name = "applicationLog")
@Table(name = "`applicationLog`")
public class ApplicationLog extends BasicLogEventEntity {

@Getter
@Setter
@Column(name = "`customEventDate`")
private LocalDateTime customEventDate;

@Getter
@Setter
@Column(name = "`customException`")
@Type(type = "text")
private String customException;

@Getter
@Setter
@Column(name = "`customLevel`", length = 512)
private String customLevel;

@Getter
@Setter
@Column(name = "`customLogger`", length = 512)
private String customLogger;

@Getter
@Setter
@Column(name = "`customMessage`")
@Type(type = "text")
private String customMessage;

@Getter
@Setter
@Column(name = "`customThreadName`", length = 512)
private String customThreadName;

@Getter
@Setter
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "`id`")
private long id;

public ApplicationLog() {
super();
}

public ApplicationLog(LogEvent logEvent) {
super();
if (logEvent != null) {
setCustomEventDate(Instant.ofEpochMilli(logEvent.getTimeMillis()).atZone(ZoneId.systemDefault()).toLocalDateTime());
if (logEvent.getThrown() != null) {
setCustomException(ExceptionUtils.getStackTrace(logEvent.getThrown()));
}
if (logEvent.getLevel() != null) {
setCustomLevel(logEvent.getLevel().name());
}
setCustomLogger(logEvent.getLoggerName());
if (logEvent.getMessage() != null) {
setCustomMessage(logEvent.getMessage().toString());
}
setCustomThreadName(logEvent.getThreadName());
}
}
}

关于mysql - Log4j2 JPAAppender blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com