Integrera dedikerade loggmeddelande i Eclipse-RCP-applikation

Integrera dedikerade loggmeddelande i Eclipse-RCP-applikation
oktober 4, 2012 squeedconfig

I det projekt jag arbetar finns ett behov av att presentera fel av en viss klass för vissa användare. Dessa fel loggas redan med ett loggingramverk (dolt bakom slf4j), men tyvärr drunknar dessa i mängden av andra loggmedelanden.

Att för desa användare filtrera ut endast den beskrivna klassen av meddelanden (d v s en klassisk loggmeddelande-presentation) är ju tekniskt enkelt men inte önskvärt; istället vore det bra om dessa fel presenterades visuellt integrerat i applikationen.

Två kandidater verkar intressanta:

och jag har här kort utvärderat dem.

log4j-viewer

  1. Endast byggd för log4j
  2. Endast byggd för log4j v1
  3. Tveksam kvalitet (Stänger man inte av log4j-viewerns egna loggar så får du rundgång och SWT-tråden hänger)
  4. De preferences som log4j-viewer använder för att välja kolumner är inte dokumenterade, så man får leta lite i källkoden för att härleda/reverse engineering
  5. Eclipse Public License

Logback-beagle

  1. Endast byggd för logback
  2. Eclipse Public License
Så punkterna 1 och 2 är ju tråkiga för log4j-viewer. Om vi i applikationen har lyckats gömma log4j bakom slf4j, så skall vi ju inte exponera log4j igen (indirekt exponering genom att vi inför beroende till log4j-viewer).

På samma sätt är ju punkt 1 till logback-beagles nackdel, men just nu känns logback rätt, och detta är därför inte lika allvarligt.

Integrering av log4j-viewer

1. Installera plugin från update-site: https://update-site.log4j-viewer.googlecode.com/hg

2. Lägg till log4j-viewer till din applikationskonfiguration. I mitt exempel gjorde jag det genom att och lägga till vyn i mitt perspektiv via plugin.xml:






där com.example.rcpapp.view är min applikation och log4jviewer.ui.views.LogView är den nya vyn.

3. Definiera specifik logger (com.example.rcpapp.Topic-A) och SocketAppender (log4j.appender.Log4jViewer) och se till att det endast är den specifika loggern som kommuniceras med appendern (det var ju det som var huvudsyftet med uppgiften):
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.appender.Log4jViewer=org.apache.log4j.net.SocketAppender
log4j.appender.Log4jViewer.remoteHost=localhost
log4j.appender.Log4jViewer.port=4445
log4j.appender.Log4jViewer.locationInfo=true

log4j.logger.com.example.rcpapp.Topic-A=DEBUG, Log4jViewer
log4j.additivity.com.example.rcpapp.Topic-A=false

4. Använd default logger för vanlig loggning och använd istället specifik logger för sådant som skall nå log4j-viewer:
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
private static Logger loggerTopicA = LogManager.getLogger("com.example.rcpapp.Topic-A");
loggerTopicA.error("An error");
loggerTopicA.warn("A warning");


Skärmdump där den undre delen är vyn från log4j-viewer.

Integrering av logback-beagle

(mycket lik den för log4j-viewer)

1. Installera plugin från update-site: http://logback.qos.ch/p2/

2. Lägg till logback-beagle till din applikationskonfiguration:





3. Definiera logback-specifik socketappender med filter som bara accepterar den amrkör vi är intresserade av (TOPICA):


%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n





TOPICA

DENY
NEUTRAL

localhost 4321 2000
true






Om man inte vill begränsa med markör kan man använda korthanden som alltså ersätter hela appendern.

4. Logga med markör:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;

private static Logger logger = LoggerFactory.getLogger(View.class);

private static Marker topicAMarker = MarkerFactory.getMarker("TOPICA");

logger.warn("meddelande"); //ingen markör, når därmed inte logback-beagle
logger.warn(topicAMarker, "viktigare meddelande"); //vår markör, når därmed både logback-beagle och övriga appenders


Skärmdump där den undre delen är vyn från logback-beagle.

Logback Eclipse Extension
logback eclipse extension

Logback arbetar med en uttökning som innehåller en Eclipse Log Appender och som när den är klar skall presentera log-meddelanden i eclipse-fel-log, vilket betyder att de dyker upp i konsollen men även i vyn som heter ErrorLog.

Fast när jag prövade detta hamnar de automatiskt endast i konsollen, i fel-vyn syns de bara om man manuellt begär så kontinuerligt.

Dessutom är det oklart om man kan lägga till vyn ErrorLog till sin applikation.

0 Kommentarer

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

Denna webbplats använder Akismet för att minska skräppost. Lär dig hur din kommentardata bearbetas.