Solution : Finally after lots of search and tries, just found that it seems to work if, in OrchardLog4netLogger.cs, we replace
_shellSettings = new Lazy<shellsettings>(LoadSettings);</shellsettings>
With
_shellSettings = new Lazy<shellsettings>(LoadSettings,
System.Threading.LazyThreadSafetyMode.PublicationOnly);</shellsettings>
Then, all threads are allowed to run the initialization method. The first thread to complete initialization sets the value of the Lazy<t> instance.