Enterprise Library Logging and Instrumentation Application Block - γιατί βρε παλικάρια;
Ειπα και εγώ σαν καλό παιδί να δοκιμάσω το Logging and Instrumentation Application Block του Enterprise Library, σε μια εφαρμογή που ήδη χρησιμοποιεί το Data Access Application Block.
Στο documentation ειδα οτι με μια γραμμή κώδικα μπορώ να γράφω σε όποιο sink (ουσιαστικά "μέρος" που κανω log - email, flat file, database κλπ). Ηθελα database. Σε πολλές κλήσεις υπάρχει ένα object που πηγαινοέρχεται, του οποίου ορισμένα properties θα ήθελα να γράφονται σε ξεχωριστά πεδία του πίνακά μου.
Η απογοήτευση!
Το database sink παίζει με μια συγκεκριμένη Stored Procedure της οποίας μπορείς να μεταβάλλεις το όνομα αλλα ΟΧΙ τα arguments που περνάνε σε αυτή! Οριστε τα arguments:
EventID, Category, Priority, Severity, Title, Timestamp, MachineName, AppDomainName, ProcessID, ProcessName, ThreadName, Win32ThreadId, Message, FormattedMessage
Δεν έχω τη δυνατότητα να περάσω άλλα εκτός αν κάνω extend το DatabaseSink class. Αλλα μετά, χάνω την ευκολία που μου παρέχει το configuration GUI! Και μην μου πει κανείς να πάρω το FormattedMessage (που είναι ntext) και να κάνω split σε SQL πράγματα που θα του περνάω delimited, γιατί δεν θέλω να σέρνεται. Θα χρησιμοποιηθεί για audit.
Αλλη λύση ήταν να "πειράξω" το ίδιο το block αλλα μετά ξεφεύγω από το standard και με καμμια αναβάθμισή του θα ψαχνόμαστε....
Μερικές ώρες χαμένες, και ήμουν τόσο ενθουσιασμένος...μα καλά, γιατί βάλανε hardcoded τα arguments που θα περάσουν στην SP? Δεν είχαν υπόψη τους οτι ειναι LOGGING και ΜΠΟΡΕΙ να θέλει κάποιος κακομοίρης να περάσει στην database και άλλες πληροφορίες;
Κλαψ.