I found this awesome blog post about 4 tips on log4net from the year 2005.
Since the code is out to date I post here my update.
2 nice things:
- I use EntityConnectionStringBuilder to extract the database connection string from an entity framework connection string
- If my log4net connectionstring, holds {auto} , we replace it, otherwise we wont
(so that we can change the logging database, if we want to)
protected void Application_Start(object sender, EventArgs e) { // change the connectionString setting of the ADONetAppender at runtime // to the value of the connectionstring appSetting in the web.config: // Get the Hierarchy object that organizes the loggers Hierarchy hier = log4net.LogManager.GetRepository() as Hierarchy; if (hier != null) { // Get ADONetAppender var adoAppender = (AdoNetAppender)hier.GetAppenders().Where( appender => appender.Name.Equals("ADONetAppender", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (adoAppender != null) { // Change only when the auto setting is set if (adoAppender.ConnectionString.Contains("{auto}")) { adoAppender.ConnectionString = ExtractConnectionStringFromEntityConnectionString( GetEntitiyConnectionStringFromWebConfig()); //refresh settings of appender adoAppender.ActivateOptions(); } } } } private string ExtractConnectionStringFromEntityConnectionString(string entityConnectionString) { // create a entity connection string from the input EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(entityConnectionString); // read the db connectionstring return entityBuilder.ProviderConnectionString; }
LogManager.GetLoggerRepository is obsolete. Thanks Resharper ;-) . Use: GetRepository()
Now up to write some unit tests around this!
No comments:
Post a Comment