Toon posts:

Log4j laten schrijven naar database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer de gegevens die gelogd moeten worden naar een database te schrijven met behulp van Log4j. Het lukt prima om gegevens weg te schrijven (zowel naar file als naar een database), maar ik krijg het niet voor elkaar om parameters mee te geven naar mijn SQL.

Een voorbeeld om het duidelijker te maken. Mijn config file van log4j bevat onderstaande code:

...
<appender name="ERRORLOGFILE" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:oracle:thin:@host:port:db" />
<param name="Driver" value="oracle.jdbc.driver.OracleDriver" />
<param name="User" value="username" />
<param name="Password" value="passwd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="INSERT INTO TABLE (code, naam) VALUES ('100', ???)"/>
</layout>
</appender>
...
<category name="ERRORLOGGER">
<priority value="error"/>
<appender-ref ref="ERRORLOGFILE"/>
</category>
...

Op de plek van de vraagtekens (???) moet data komen te staan uit mijn applicatie. Wanneer ik in plaats van de vraagtekens een harde waarde codeer is het geen probleem, dan wordt deze gewoon naar de database geschreven. Dus de database connectie is geen probleem. Ik ben dus opzoek naar een mogelijkheid om een link te leggen tussen een variabele in mijn code en de vraagtekens.

Ik heb wel mogelijkheden gevonden om veel standaard info in je SQL te parkeren door middel van %r, %c enz enz maar dit lijkt niet de oplossing te bieden die ik zoek (tenzij ik over een bepaalde optie heen heb gekeken). Verder heb ik voorbeelden op internet gevonden waar de @VAR_NAAM@ notaties wordt gebruikt maar ik heb nog geen werkend (voor mij duidelijk) voorbeeld kunnen vinden waar ik wat mee kan. Het zou kunnen dat ik met deze oplossing mijn probleem oplos maar ik zou niet weten hoe de link tussen variabele uit mijn programma kan linken aan deze waarde.

Weet iemand of het bovenstaande mogelijk is? En zo ja hoe :)?

Alvast bedankt.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 19:04

momania

iPhone 30! Bam!

Je kan via de JDBCAppender alleen maar de standaard log4j values loggen.

SQL:
1
INSERT INTO JDBCTEST (Message) VALUES ('%d - %c - %p - %m')


Als je andere data uit je applicatie wilt loggen, zal je je eigen implementatie van een Appender moeten maken. :)

Neem je whisky mee, is het te weinig... *zucht*


  • BHR
  • Registratie: Februari 2002
  • Laatst online: 01-12 19:42

BHR

Ik geloof dat je hiervoor gebruik kunt maken van MDC of NDC van log4j. (googled: http://logging.apache.org...org/apache/log4j/MDC.html en http://www.rtner.de/software/MDCUserServletFilter.html en http://wiki.apache.org/lo...vsMDC?highlight=%28mdc%29)

Heb het zelf echter nog nooit toegepast.

[ Voor 27% gewijzigd door BHR op 20-12-2006 12:38 ]

No amount of key presses will shut off the Random Bug Generator


Verwijderd

Topicstarter
Thnx, ik begon al een vermoeden te krijgen dat het niet mogelijk was via die standaard manier. Dan ga ik we eens aan de gang met een eigen appender :)

Toch altijd leuk voor planningen als die dingen die je "out of the box" had verwacht toch wat meer inspanningen vergen. Gelukkig heb je altijd de kerstdagen nog ;)

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 27-11 13:24
Verwijderd schreef op woensdag 20 december 2006 @ 13:00:
Thnx, ik begon al een vermoeden te krijgen dat het niet mogelijk was via die standaard manier. Dan ga ik we eens aan de gang met een eigen appender :)

Toch altijd leuk voor planningen als die dingen die je "out of the box" had verwacht toch wat meer inspanningen vergen. Gelukkig heb je altijd de kerstdagen nog ;)
Het kan toch echt out of the box hoor, zoals in de links van BHR staat:

org.apache.log4j.MDC.put("foo", "bar");

insert into ... , '%X{foo}', ...

Alleen vraag ik me af of ' wordt ge-escaped, waarschijnlijk niet dus misschien is een eigen appender niet eens zo'n slecht idee. Let ook op dat MDC een ThreadLocal ding is.

Verwijderd

Topicstarter
matthijsln schreef op woensdag 20 december 2006 @ 14:26:
Alleen vraag ik me af of ' wordt ge-escaped, waarschijnlijk niet dus misschien is een eigen appender niet eens zo'n slecht idee. Let ook op dat MDC een ThreadLocal ding is.
Zover ik heb kunnen vinden wordt de ' niet ge-escaped... maar verder waren er nog meer characters die niet echt lekker waren waaronder ook comma's (,) ed dus je bent wel heel beperkt in de teksten die je er heen parkeert.

--- edit ---
Wat bedoel je trouwens precies met, Let ook op dat MDC een ThreadLocal ding is... Ik bedoel wat zijn hier de voordelen, nadelen of gevolgen van?

[ Voor 13% gewijzigd door Verwijderd op 20-12-2006 15:18 ]


Verwijderd

Topicstarter
Misschien nog even voor de duidelijkheid en afronding. De manier die BHR en matthijsln aangeven werkt. Het is mogelijk om met de gegeven notatie eigen gegevens weg te schrijven naar een database. Echter het quote-teken ( ' ) geeft problemen. De insert zal niet goed verlopen. Ik heb getest met andere tekens zoals dubbele quote ( " ) en ampasant ( & ) en die lijken zonder problemen te werken.

Conclusie het is mogelijk maar wel uitkijken met de characters die je gebruikt :)
Pagina: 1