Autofac log4net Integration Module
log4net Integration Module
While there is no specific assembly for log4net support, you can easily inject log4net.ILog
values using a very small custom module.
This module is also a good example of how to use Autofac modules for more than simple configuration - they’re also helpful for doing some more advanced extensions.
Here’s a sample module that configures Autofac to inject ILog
parameters based on the type of the component being activated. This sample module will handle both constructor and property injection.
public class LoggingModule : Autofac.Module { private static void InjectLoggerProperties(object instance) { var instanceType = instance.GetType(); // Get all the injectable properties to set. // If you wanted to ensure the properties were only UNSET properties, // here's where you'd do it. var properties = instanceType .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(p => p.PropertyType == typeof(ILog) && p.CanWrite && p.GetIndexParameters().Length == 0); // Set the properties located. foreach (var propToSet in properties) { propToSet.SetValue(instance, LogManager.GetLogger(instanceType), null); } } private static void OnComponentPreparing(object sender, PreparingEventArgs e) { e.Parameters = e.Parameters.Union( new[] { new ResolvedParameter( (p, i) => p.ParameterType == typeof(ILog), (p, i) => LogManager.GetLogger(p.Member.DeclaringType) ), }); } protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) { // Handle constructor parameters. registration.Preparing += OnComponentPreparing; // Handle properties. registration.Activated += (sender, e) => InjectLoggerProperties(e.Instance); } }
Performance Note: At the time of this writing, calling LogManager.GetLogger(type)
has a slight performance hit as the internal log manager locks the collection of loggers to retrieve the appropriate logger. An enhancement to the module would be to add caching around logger instances so you can reuse them without the lock hit in the LogManager
call.
相关文章
- [oeasy]python0024_ 输出时间_time_模块_module_函数_function
- JS 之export、export default和module.exports
- cannot start compilation;the output path is not specified for module specify the output path in the project structure dialog
- Datax-Web运行报错“/usr/bin/python: can't find '__main__' module in ''”
- 2020-11-05 Improving Opencv9 Image Processing (imgproc module) :Smoothing Images
- IDEA创建Java9模块没有module-info.java的解决办法
- 已解决ModuleNotFoundError: No module named ‘pip‘
- Nginx RTMP 模块 nginx-rtmp-module 指令详解
- rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加
- Python Module_pdb_DEBUG 方法
- Python Module_subprocess_调用 Powershell