Tweaking amount of logging done in extension loaders

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-06-18 19:54:08 -07:00
parent a2da9c0f97
commit 7e23f3a30b
9 changed files with 76 additions and 43 deletions

View File

@@ -3,16 +3,14 @@ using System.Linq;
using System.Reflection;
using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.Dependencies;
using Orchard.FileSystems.VirtualPath;
using Orchard.Logging;
namespace Orchard.Environment.Extensions.Loaders {
public class AreaExtensionLoader : ExtensionLoaderBase {
private readonly IDependenciesFolder _dependenciesFolder;
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder)
: base(dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;
Logger = NullLogger.Instance;
}
@@ -32,8 +30,8 @@ namespace Orchard.Environment.Extensions.Loaders {
return null;
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Web");

View File

@@ -1,10 +1,8 @@
using System;
using System.Linq;
using System.Reflection;
using Orchard.Caching;
using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.Dependencies;
using Orchard.FileSystems.VirtualPath;
using Orchard.Logging;
namespace Orchard.Environment.Extensions.Loaders {
@@ -12,11 +10,10 @@ namespace Orchard.Environment.Extensions.Loaders {
/// Load an extension by looking into specific namespaces of the "Orchard.Core" assembly
/// </summary>
public class CoreExtensionLoader : ExtensionLoaderBase {
private readonly IDependenciesFolder _dependenciesFolder;
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder)
: base(dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;
Logger = NullLogger.Instance;
}
@@ -36,8 +33,8 @@ namespace Orchard.Environment.Extensions.Loaders {
return null;
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Core");

View File

@@ -55,6 +55,7 @@ namespace Orchard.Environment.Extensions.Loaders {
// Since a dynamic assembly is not active anymore, we need to notify ASP.NET
// that a new site compilation is needed (since ascx files may be referencing
// this now removed extension).
Logger.Information("ExtensionRemoved: Module \"{0}\" has been removed, forcing site recompilation");
ctx.ResetSiteCompilation = true;
}
@@ -62,12 +63,13 @@ namespace Orchard.Environment.Extensions.Loaders {
// Since a dynamic assembly is not active anymore, we need to notify ASP.NET
// that a new site compilation is needed (since ascx files may be referencing
// this now removed extension).
Logger.Information("ExtensionDeactivated: Module \"{0}\" has been de-activated, forcing site recompilation");
ctx.ResetSiteCompilation = true;
}
public override void ExtensionActivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension) {
if (_reloadWorkaround.AppDomainRestartNeeded) {
Logger.Information("ExtensionActivated: Setting AppDomain for restart because csproj for module \"{0}\" changed and will need to be re-compiled", extension.Name);
Logger.Information("ExtensionActivated: Module \"{0}\" has changed, forcing AppDomain restart", extension.Name);
ctx.RestartAppDomain = _reloadWorkaround.AppDomainRestartNeeded;
}
}
@@ -85,13 +87,13 @@ namespace Orchard.Environment.Extensions.Loaders {
};
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
string projectPath = GetProjectPath(descriptor);
if (projectPath == null)
return null;
var assembly = _buildManager.GetCompiledAssembly(projectPath);
Logger.Information("Loading extension \"{0}\": assembly name=\"{1}\"", descriptor.Name, assembly.GetName().Name);
//Logger.Information("Loading extension \"{0}\": assembly name=\"{1}\"", descriptor.Name, assembly.GetName().Name);
return new ExtensionEntry {
Descriptor = descriptor,

View File

@@ -7,7 +7,7 @@ using Orchard.FileSystems.Dependencies;
namespace Orchard.Environment.Extensions.Loaders {
public abstract class ExtensionLoaderBase : IExtensionLoader {
private readonly IDependenciesFolder _dependenciesFolder;
protected readonly IDependenciesFolder _dependenciesFolder;
protected ExtensionLoaderBase(IDependenciesFolder dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;
@@ -31,7 +31,7 @@ namespace Orchard.Environment.Extensions.Loaders {
public virtual void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { }
public virtual void Monitor(ExtensionDescriptor extension, Action<IVolatileToken> monitor) { }
public abstract ExtensionEntry LoadWorker(ExtensionDescriptor descriptor);
protected abstract ExtensionEntry LoadWorker(ExtensionDescriptor descriptor);
public virtual string GetWebFormAssemblyDirective(DependencyDescriptor dependency) {
return null;

View File

@@ -13,21 +13,20 @@ namespace Orchard.Environment.Extensions.Loaders {
/// extension directory.
/// </summary>
public class PrecompiledExtensionLoader : ExtensionLoaderBase {
private readonly IDependenciesFolder _dependenciesFolder;
private readonly IAssemblyProbingFolder _assemblyProbingFolder;
private readonly IVirtualPathProvider _virtualPathProvider;
private readonly IVirtualPathMonitor _virtualPathMonitor;
public PrecompiledExtensionLoader(IDependenciesFolder dependenciesFolder,
IAssemblyProbingFolder assemblyProbingFolder,
public PrecompiledExtensionLoader(IDependenciesFolder dependenciesFolder,
IAssemblyProbingFolder assemblyProbingFolder,
IVirtualPathProvider virtualPathProvider,
IVirtualPathMonitor virtualPathMonitor)
: base(dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;
_assemblyProbingFolder = assemblyProbingFolder;
_virtualPathProvider = virtualPathProvider;
_virtualPathMonitor = virtualPathMonitor;
Logger = NullLogger.Instance;
}
@@ -45,11 +44,15 @@ namespace Orchard.Environment.Extensions.Loaders {
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
if (_assemblyProbingFolder.AssemblyExists(dependency.Name)) {
ctx.DeleteActions.Add(() => _assemblyProbingFolder.DeleteAssembly(dependency.Name));
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionRemoved: Deleting assembly \"{0}\" from probing directory", dependency.Name);
_assemblyProbingFolder.DeleteAssembly(dependency.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (IsAssemblyLoaded(dependency.Name)) {
Logger.Information("Extension removed: Setting AppDomain for restart because assembly {0} is loaded", dependency.Name);
Logger.Information("ExtensionRemoved: Module \"{0}\" is removed and its assembly is loaded, forcing AppDomain restart", dependency.Name);
ctx.RestartAppDomain = true;
}
}
@@ -65,9 +68,10 @@ namespace Orchard.Environment.Extensions.Loaders {
if (copyAssembly) {
ctx.CopyActions.Add(() => _assemblyProbingFolder.StoreAssembly(extension.Name, sourceFileName));
// We need to restart the appDomain if the assembly is loaded
if (IsAssemblyLoaded(extension.Name)) {
Logger.Information("Extension activated: Setting AppDomain for restart because assembly {0} is loaded", extension.Name);
Logger.Information("ExtensionRemoved: Module \"{0}\" is activated with newer file and its assembly is loaded, forcing AppDomain restart", extension.Name);
ctx.RestartAppDomain = true;
}
}
@@ -75,11 +79,15 @@ namespace Orchard.Environment.Extensions.Loaders {
public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension) {
if (_assemblyProbingFolder.AssemblyExists(extension.Name)) {
ctx.DeleteActions.Add(() => _assemblyProbingFolder.DeleteAssembly(extension.Name));
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionDeactivated: Deleting assembly \"{0}\" from probing directory", extension.Name);
_assemblyProbingFolder.DeleteAssembly(extension.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (IsAssemblyLoaded(extension.Name)) {
Logger.Information("Extension deactivated: Setting AppDomain for restart because assembly {0} is loaded", extension.Name);
Logger.Information("ExtensionDeactivated: Module \"{0}\" is deactivated and its assembly is loaded, forcing AppDomain restart", extension.Name);
ctx.RestartAppDomain = true;
}
}
@@ -106,12 +114,12 @@ namespace Orchard.Environment.Extensions.Loaders {
};
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
if (assembly == null)
return null;
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
return new ExtensionEntry {
Descriptor = descriptor,

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.IO;
using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.Dependencies;
using Orchard.Logging;
@@ -35,11 +34,15 @@ namespace Orchard.Environment.Extensions.Loaders {
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
if (_assemblyProbingFolder.AssemblyExists(dependency.Name)) {
ctx.DeleteActions.Add(() => _assemblyProbingFolder.DeleteAssembly(dependency.Name));
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionRemoved: Deleting assembly \"{0}\" from probing directory", dependency.Name);
_assemblyProbingFolder.DeleteAssembly(dependency.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (IsAssemblyLoaded(dependency.Name)) {
Logger.Information("Extension removed: Setting AppDomain for restart because assembly {0} is loaded", dependency.Name);
Logger.Information("ExtensionRemoved: Module \"{0}\" is removed and its assembly is loaded, forcing AppDomain restart", dependency.Name);
ctx.RestartAppDomain = true;
}
}
@@ -47,11 +50,15 @@ namespace Orchard.Environment.Extensions.Loaders {
public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension) {
if (_assemblyProbingFolder.AssemblyExists(extension.Name)) {
ctx.DeleteActions.Add(() => _assemblyProbingFolder.DeleteAssembly(extension.Name));
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionDeactivated: Deleting assembly \"{0}\" from probing directory", extension.Name);
_assemblyProbingFolder.DeleteAssembly(extension.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (IsAssemblyLoaded(extension.Name)) {
Logger.Information("Extension deactivated: Setting AppDomain for restart because assembly {0} is loaded", extension.Name);
Logger.Information("ExtensionDeactivated: Module \"{0}\" is deactivated and its assembly is loaded, forcing AppDomain restart", extension.Name);
ctx.RestartAppDomain = true;
}
}
@@ -73,12 +80,12 @@ namespace Orchard.Environment.Extensions.Loaders {
};
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
if (assembly == null)
return null;
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
return new ExtensionEntry {
Descriptor = descriptor,

View File

@@ -13,13 +13,11 @@ namespace Orchard.Environment.Extensions.Loaders {
/// Load an extension by looking through the BuildManager referenced assemblies
/// </summary>
public class ReferencedExtensionLoader : ExtensionLoaderBase {
private readonly IDependenciesFolder _dependenciesFolder;
private readonly IVirtualPathProvider _virtualPathProvider;
public ReferencedExtensionLoader(IDependenciesFolder dependenciesFolder, IVirtualPathProvider virtualPathProvider)
: base(dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;
_virtualPathProvider = virtualPathProvider;
Logger = NullLogger.Instance;
}
@@ -29,9 +27,21 @@ namespace Orchard.Environment.Extensions.Loaders {
public override int Order { get { return 20; } }
public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension) {
var assemblyPath = _virtualPathProvider.Combine("~/bin", extension.Name + ".dll");
DeleteAssembly(ctx, extension.Name);
}
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
DeleteAssembly(ctx, dependency.Name);
}
private void DeleteAssembly(ExtensionLoadingContext ctx, string moduleName) {
var assemblyPath = _virtualPathProvider.Combine("~/bin", moduleName + ".dll");
if (_virtualPathProvider.FileExists(assemblyPath)) {
ctx.DeleteActions.Add(() => File.Delete(_virtualPathProvider.MapPath(assemblyPath)));
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionRemoved: Deleting assembly \"{0}\" from bin directory (AppDomain will restart)", moduleName);
File.Delete(_virtualPathProvider.MapPath(assemblyPath));
});
}
}
@@ -54,7 +64,7 @@ namespace Orchard.Environment.Extensions.Loaders {
};
}
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
if (HostingEnvironment.IsHosted == false)
return null;
@@ -65,7 +75,7 @@ namespace Orchard.Environment.Extensions.Loaders {
if (assembly == null)
return null;
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
return new ExtensionEntry {
Descriptor = descriptor,

View File

@@ -1,6 +1,7 @@
using System;
using System.Reflection;
using Orchard.FileSystems.AppData;
using Orchard.Logging;
namespace Orchard.FileSystems.Dependencies {
public class DefaultAssemblyProbingFolder : IAssemblyProbingFolder {
@@ -9,8 +10,12 @@ namespace Orchard.FileSystems.Dependencies {
public DefaultAssemblyProbingFolder(IAppDataFolder appDataFolder) {
_appDataFolder = appDataFolder;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public bool AssemblyExists(string moduleName) {
var path = PrecompiledAssemblyPath(moduleName);
return _appDataFolder.FileExists(path);
@@ -39,11 +44,17 @@ namespace Orchard.FileSystems.Dependencies {
public void DeleteAssembly(string moduleName) {
var path = PrecompiledAssemblyPath(moduleName);
_appDataFolder.DeleteFile(path);
if (_appDataFolder.FileExists(path)) {
Logger.Information("Deleting assembly for module \"{0}\" from probing directory", moduleName);
_appDataFolder.DeleteFile(path);
}
}
public void StoreAssembly(string moduleName, string fileName) {
var path = PrecompiledAssemblyPath(moduleName);
Logger.Information("Storing assembly file \"{0}\" for module \"{1}\"", fileName, moduleName);
_appDataFolder.StoreFile(fileName, path);
}

View File

@@ -52,7 +52,7 @@ namespace Orchard.FileSystems.Dependencies {
.Concat(file.Loaders.SelectMany(dl => dl.Loader.GetWebFormVirtualDependencies(dl.Descriptor)));
if (Logger.IsEnabled(LogLevel.Debug)) {
Logger.Debug("GetFilHash(\"{0}\") - virtual path dependencies:", virtualPath);
Logger.Debug("GetFileHash(\"{0}\") - virtual path dependencies:", virtualPath);
foreach(var dependency in dependencies) {
Logger.Debug(" Dependency: \"{0}\"", dependency);
}
@@ -61,7 +61,7 @@ namespace Orchard.FileSystems.Dependencies {
}
public override VirtualFile GetFile(string virtualPath) {
Logger.Debug("GetFile(\"{0}\")", virtualPath);
//Logger.Debug("GetFile(\"{0}\")", virtualPath);
var actualFile = Previous.GetFile(virtualPath);
return GetModuleCustomVirtualFile(virtualPath, actualFile) ??