Search the FirstSpirit Knowledge Base
Hallo zusammen,
ist es möglich im Rahmen eines Scriptes ein fortlaufendes Logging zu bauen?
Szenario:
Ein Skript läuft rekursiv durch den Inhaltsbaum und prüft, ob sich eine Seite in einem Workflow befindet und setzt die Seite ggf. zurück.
Damit der Benutzer nun entsprechendes Feedback während der Laufzeit des Skripts erhält, war die Überlegung ein fortlaufendes Logging einzubauen.
Die Frage ist nun: Wie baue ich so ein Logging?
Per RequestOperation und perform werden jedes Mal neue Meldungen generiert und es entsteht eine Klickorgie. Ein einziger perform-Aufruf führt natürlich dazu, dass nur ein Fenster erscheint, jedoch logischerweise erst beim Aufruf.
String log = "";
operationAgent = context.requireSpecialist(de.espirit.firstspirit.agency.OperationAgent.TYPE);
reqOp = operationAgent.getOperation(de.espirit.firstspirit.ui.operations.RequestOperation.TYPE);
reqOp.setKind(de.espirit.firstspirit.ui.operations.RequestOperation.Kind.INFO);
reqOp.setTitle("Fertig");
killWorkflow(rootElement); // enthält z.B. log = log + child.getName() + " wurde erfolgreich entsperrt\r\n";
reqOp.perform("Fertig\r\n" + log);
Habt ihr vielleicht einen Ansatz?
Das FirstSpirit-Logging, welches über die Hilfe erreichbar ist, entspricht dem "normalen" Log, über den auch DEV-Hinweise ausgegeben werden. In diesem Fall sind die eher störend, weshalb ich eine einfache Möglichkeit suche, ein eigenes (fortlaufendes) Logging zu implementieren.
Danke und Grüße
Thomas
warum nicht in medienbereich?
StringWriter out = new StringWriter();
.........
String name = "today_log";
Store mediastore = us.getStore(Store.Type.MEDIASTORE, false);
MediaFolder folder = (MediaFolder) mediastore.getStoreElement("logs_folder", IDProvider.UidType.MEDIASTORE_FOLDER);
Media log = (Media) mediastore.getStoreElement(name, IDProvider.UidType.MEDIASTORE_LEAF);
if (log == null) {
log = ((MediaFolder) folder).createMedia(name, name, Media.FILE, false);
}
byte[] bytes = out.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
Long siInteger = (long) bytes.length;
byte[] bytes = out.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
Long si = (long) bytes.length;
long length = si.longValue();
log.setLock(true);
log.getLanguageInfo(lang).setDisplayName(name);
de.espirit.firstspirit.access.store.mediastore.File newFile = log.getFile(null);
newFile.setFile(length, bais, "text");
log.save();
log.setLock(false);
log.setLock(false);
Hallo Thomas,
Wenn es nur im das Speichern der Logs geht, könntest du dafür auch einen Datenquelle verwenden. Der Vorteil daran wäre, dass auch dann auch Filtern kannst.
Für den Benutzer könnte so einen normale Ausgabe über FS Templates oder AppCenter gebaut werden.
Gruß
Thorsten
Hi Thomas,
deiner Problembeschreibung nach geht es dir doch eher um ein asynchrones Logging während das Skript läuft, oder? (Quasi eine Art progress)
Falls ja - ich habe hierfür mal einem Dev-Projekt Marians SecondHand Log für meine Zwecke erweitert/umgebaut (Log-Konsole für den SiteArchitect ),
damit es nur Meldungen von Klassen aus definierten Packages loggt. Das könntest du auch machen (oder ein vergleichbares Logfenster bauen) und es vor Beginn des Skriptes anzeigen. Alles, was du dann im Skript loggst landet in der Konsole.
Gruß
Felix
Hi Thomas,
benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Thorsten und Felix bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung
gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße
Martin