2022-07-28T12:14:27+02:00
2022-07-28T14:28:34+02:00
2022-07-30T01:27:45+02:00
O.AdamB
Ez az classom:
És itt próbálom be logolni az adatbázisba, de valami miatt mindig hibára fut.
És még tartozik hozzá egy properties fájl is
Valaki tudna segíteni, hogy milyen irányba induljak el?
package com.example.SMS.enitties;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
@AllArgsConstructor
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table
public class log {
@Id
@SequenceGenerator(name = "log_generator", sequenceName = "log_sequence", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "log_generator")
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column(columnDefinition = "TEXT")
private String message;
@Column(name = "log_type")
private String logType;
}
package com.example.SMS.enitties;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
@AllArgsConstructor
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table
public class log {
@Id
@SequenceGenerator(name = "log_generator", sequenceName = "log_sequence", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "log_generator")
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column(columnDefinition = "TEXT")
private String message;
@Column(name = "log_type")
private String logType;
}
log4j.rootLogger = DEBUG,db
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.driver=org.postgresql.Driver
log4j.appender.db.URL=jdbc:postgresql://localhost:5432/SMS
log4j.appender.db.user=postgres
log4j.appender.db.password=2022ADtitanic
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.sql=insert into log(log_type, message) values('%p', '%m')
Valaki tudna segíteni, hogy milyen irányba induljak el?
Mutasd a teljes hozzászólást!
- Csaboka2válasza O.AdamB (12:14) részére
- 2022.07.28. 12:35
- permalink
Én a hibaüzenet értelmezésével kezdeném: Megpróbáltál beszúrni egy sort a táblába, úgy hogy a kötelező ID mezőnek nem adtál értéket.
Az szép és jó dolog hogy neked van egy JPA-d aminek elmagyaráztad hogy az "id" mezőt szekvenciából töltse fel, csak erről a Log4J nem tud semmit, mivel ő közvetlenül a JDBC-vel dolgozik és a JPA-val nem foglalkozik. Ő lefuttatja az insert utasítást amit adtál neki, nem is tudja hogy "id" mező is van a táblában.
El kéne dönteni hogy akkor a JPA-n keresztül akarod vinni a logok mentését, vagy sem.
* Ha igen, akkor valahogy meg kell oldani hogy a log implementáció JPA entitásokat hozzon létre és mentsen el. Személy szerint nem tartom jó ötletnek, a logolást nem szeretik az emberek felesleges absztrakciós rétegekkel lassítani.
* Ha nem, akkor az adott adatbázis (esetedben Postgres) lehetőségeit kell megnézni, támogat-e autoincrement típusú oszlopot vagy egyéb automata generálási lehetőséget. Ha ilyen nincs, akkor a Log4J konfigjában kell úgy átírnod az insert utasítást, hogy hivatkozzon szekvenciára, vagy annak megfelelő Postgres-beli eszközre.
(Az is játszik még esetleg, hogy elengeded az "id" oszlopot és olyan táblád lesz, aminek nincs kulcsa. Elvben működik, de a gyakorlatban nehezen fogsz benne bármit is megtalálni.)
Én mondjuk átgondolnám az adatbázisba logolást is úgy általában. Jóval nagyobb szokott az overhead-je lenni mintha lokális fájlba írnád a logot. Ha pedig később keresni kell benne vagy analizálni, akkor arra jobban megfelel egy erre kitalált megoldás (pl. egy ELK stack), mintha relációs adatbázisban állnál neki select-ezni.Mutasd a teljes hozzászólást!- O.AdamBválasza Csaboka2 (12:35) részére
- 2022.07.28. 13:44
- permalink
Sikerült szerencsére megoldaniMutasd a teljes hozzászólást!- Csaboka2válasza O.AdamB (13:44) részére
- 2022.07.28. 13:56
- permalink
Akkor tedd meg azt a többi fórumozó kedvéért, hogy leírod a megoldást, aztán a saját hozzászólásodat elfogadhatod megoldásként. A Tudástár elvileg nem csak arra lenne hivatott, hogy a jelenlegi problémákat megoldja, hanem hogy a jövőben segítsen másoknak, akik ugyanilyen gonddal küzdenek. Ez utóbbit funkciót nem tudja beteljesíteni, ha csak azzal zárod le a témát hogy "most már megy"Mutasd a teljes hozzászólást!- O.AdamBválasza Csaboka2 (13:56) részére
- 2022.07.28. 14:28
- permalink
@Column(name = "id",columnDefinition = "SERIAL " ) private Long id;
Mutasd a teljes hozzászólást!