- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fortlaufendes Logging im ScriptContext
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
- Labels:
-
Developers
-
Project Usage
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

