Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Akkurat hvordan logging utføres bestemmer bestemmes av hvilken implementasjon av ILogger-grensesnittet en bruker, og i denne oppgaven skal du implementere følgende tre klasser:

...

Disse utgjør hver som deloppgave og beskrevet under.

Exercise-panelet

Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med Logger.ex-filen (tests > patterns.delegation Logger.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på forrige side, altså hovedsiden for Øving 8.

Del 1 - StreamLogger

En StreamLogger sørger for å skrive alle logg-meldinger til en angitt OutputStream (se Forelesningslysark om input/output (IO), med kode-eksempel), med én melding pr. linje (altså linjeskift mellom hver melding). OutputStream-objektet må gis inn i konstruktøren:

...

Merk at dersom format-string-en ikke er satt, så skal den ha en fornuftig start-verdi.

 

Testkode for oppgaven: patterns/delegation/StreamLoggerTest.java. Originalkoden for testen (jextest) kan du finne her: patterns/delegation/StreamLogger.jextest

Del 2 - FilteringLogger

FilteringLogger-klassen implementerer ILogger-grensesnittet og delegerer til en annen ILogger-implementasjon, men bare hvis alvorlighetsgraden er en av et sett angitte verdier. Både loggeren det delegeres til og alvorlighetsgradene angis når FilteringLogger-objektet opprettes:

...

  • boolean isLogging(String severity) - returnerer true hvis logging er slått på for den angitte alvorlighetsgraden og false ellers.
  • void setIsLogging(String severity, boolean value) - slår logging på (value = true) eller av (value = false) for den angitte alvorlighetsgraden

Eksempel på bruk:

Code Block
ILogger syserrLogger = new StreamLogger(System.err);
FilteringLogger logger = new FilteringLogger(syserrLogger, ILogger.ERROR);
logger.log(ILogger.ERROR, "Denne meldingermeldingen er alvorlig og skrives til System.err", null);
logger.log(ILogger.WARNING, "Denne meldingermeldingen er en advarsel og blir filtrert bort", null);
logger.log(ILogger.INFO, "Denne meldingermeldingen er til informasjon og blir filtrert bort", null);
logger.setIsLogging(ILogger.WARNING, true);
logger.log(ILogger.WARNING, "Denne meldingermeldingen er en advarsel og blir nå skrevet til System.err", null);


Testkode for oppgaven: patterns/delegation/FilteringLoggerTest.java. Originalkoden for testen (jextest) kan du finne her: patterns/delegation/FilteringLogger.jextest.

Del 3 - DistributingLogger

...

Code Block
ILogger syserrLogger = new StreamLogger(System.err);
ILogger sysoutLogger = new StreamLogger(System.out);
DistributingLogger logger = new DistributingLogger(syserrLogger, syserrLogger, sysoutLogger);
logger.log(ILogger.ERROR, "Denne meldingermeldingen er alvorlig og skrives til System.err", null);
logger.log(ILogger.WARNING, "Denne meldingermeldingen er en advarsel og skrives til System.err", null);
logger.log(ILogger.INFO, "Denne meldingermeldingen er til informasjon og skrives til System.out", null);
logger.setLogger(ILogger.WARNING, sysoutLogger);
logger.log(ILogger.ERRORWARNING, "Denne meldingermeldingen er en advarsel, men nå skrives den til System.out", null);

 

Testkode for oppgaven: patterns/delegation/DistributingLoggerTest.java. Originalkoden for testen (jextest) kan du finne her: patterns/delegation/DistributingLogger.jextest.

Include Page
Bunntekst for oppgaver
Bunntekst for oppgaver