From 13a05a04c168c487449f4dec84e2923abb5ef544 Mon Sep 17 00:00:00 2001 From: xuejiaming <326308290@qq.com> Date: Fri, 10 Jun 2022 20:36:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9D=99=E6=80=81=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Logger/InternalLoggerFactory.cs | 52 +++++++++++++++++++ .../QueryCompilerContextFactory.cs | 8 ++- .../TableCreator/ShardingTableCreator.cs | 7 +-- ...dingAutoCreateOperatorVirtualTableRoute.cs | 9 ++-- 4 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 src/ShardingCore/Logger/InternalLoggerFactory.cs diff --git a/src/ShardingCore/Logger/InternalLoggerFactory.cs b/src/ShardingCore/Logger/InternalLoggerFactory.cs new file mode 100644 index 00000000..d42afc80 --- /dev/null +++ b/src/ShardingCore/Logger/InternalLoggerFactory.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Text; +using System.Threading; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; + +namespace ShardingCore.Logger +{ + /// + /// + /// + /// Author: xjm + /// Created: 2022/5/18 10:02:25 + /// Email: 326308290@qq.com + public sealed class InternalLoggerFactory + { + static ILoggerFactory _defaultFactory; + + + static ILoggerFactory NewDefaultFactory() + { + var f = new NullLoggerFactory(); + return f; + } + + /// + /// Gets or sets the default factory. + /// + public static ILoggerFactory DefaultFactory + { + get + { + ILoggerFactory factory = Volatile.Read(ref _defaultFactory); + if (factory == null) + { + factory = NewDefaultFactory(); + ILoggerFactory current = Interlocked.CompareExchange(ref _defaultFactory, factory, null); + if (current != null) + { + return current; + } + } + return factory; + } + set => Volatile.Write(ref _defaultFactory, value); + } + public static ILogger CreateLogger() => DefaultFactory.CreateLogger(); + public static ILogger CreateLogger(string categoryName) => DefaultFactory.CreateLogger(categoryName); + } +} diff --git a/src/ShardingCore/Sharding/ShardingExecutors/QueryCompilerContextFactory.cs b/src/ShardingCore/Sharding/ShardingExecutors/QueryCompilerContextFactory.cs index 389a9b6b..cb08bedb 100644 --- a/src/ShardingCore/Sharding/ShardingExecutors/QueryCompilerContextFactory.cs +++ b/src/ShardingCore/Sharding/ShardingExecutors/QueryCompilerContextFactory.cs @@ -10,13 +10,15 @@ using System; using System.Linq; using System.Linq.Expressions; using ShardingCore.Extensions.InternalExtensions; +using ShardingCore.Logger; using ShardingCore.Sharding.Parsers.Abstractions; namespace ShardingCore.Sharding.ShardingExecutors { public class QueryCompilerContextFactory : IQueryCompilerContextFactory { - private readonly ILogger _logger; + private static readonly ILogger _logger = + InternalLoggerFactory.CreateLogger(); private static readonly IQueryableCombine _enumerableQueryableCombine; private static readonly IQueryableCombine _allQueryableCombine; private static readonly IQueryableCombine _constantQueryableCombine; @@ -32,10 +34,6 @@ namespace ShardingCore.Sharding.ShardingExecutors _whereQueryableCombine = new WhereQueryableCombine(); } - public QueryCompilerContextFactory(ILogger logger) - { - _logger = logger; - } public IQueryCompilerContext Create(IPrepareParseResult prepareParseResult) { diff --git a/src/ShardingCore/TableCreator/ShardingTableCreator.cs b/src/ShardingCore/TableCreator/ShardingTableCreator.cs index 8c6e5097..3cfe5f36 100644 --- a/src/ShardingCore/TableCreator/ShardingTableCreator.cs +++ b/src/ShardingCore/TableCreator/ShardingTableCreator.cs @@ -10,6 +10,7 @@ using ShardingCore.Extensions; using ShardingCore.Sharding.Abstractions; using System; using System.Threading; +using ShardingCore.Logger; namespace ShardingCore.TableCreator { @@ -21,14 +22,14 @@ namespace ShardingCore.TableCreator */ public class ShardingTableCreator : IShardingTableCreator where TShardingDbContext : DbContext, IShardingDbContext { - private readonly ILogger> _logger; + private static readonly ILogger> _logger = + InternalLoggerFactory.CreateLogger>(); private readonly IServiceProvider _serviceProvider; private readonly IShardingEntityConfigOptions _entityConfigOptions; private readonly IRouteTailFactory _routeTailFactory; - public ShardingTableCreator(ILogger> logger, IServiceProvider serviceProvider, IShardingEntityConfigOptions entityConfigOptions, IRouteTailFactory routeTailFactory) + public ShardingTableCreator(IServiceProvider serviceProvider, IShardingEntityConfigOptions entityConfigOptions, IRouteTailFactory routeTailFactory) { - _logger = logger; _serviceProvider = serviceProvider; _entityConfigOptions = entityConfigOptions; _routeTailFactory = routeTailFactory; diff --git a/src/ShardingCore/VirtualRoutes/Abstractions/AbstractShardingAutoCreateOperatorVirtualTableRoute.cs b/src/ShardingCore/VirtualRoutes/Abstractions/AbstractShardingAutoCreateOperatorVirtualTableRoute.cs index c4fcb955..1407f927 100644 --- a/src/ShardingCore/VirtualRoutes/Abstractions/AbstractShardingAutoCreateOperatorVirtualTableRoute.cs +++ b/src/ShardingCore/VirtualRoutes/Abstractions/AbstractShardingAutoCreateOperatorVirtualTableRoute.cs @@ -15,6 +15,7 @@ using ShardingCore.Core.VirtualRoutes; using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions; using ShardingCore.Extensions; using ShardingCore.Jobs.Abstaractions; +using ShardingCore.Logger; using ShardingCore.TableCreator; namespace ShardingCore.VirtualRoutes.Abstractions @@ -22,13 +23,9 @@ namespace ShardingCore.VirtualRoutes.Abstractions [ExcludeFromCodeCoverage] public abstract class AbstractShardingAutoCreateOperatorVirtualTableRoute : AbstractShardingOperatorVirtualTableRoute, IJob where TEntity : class { - private readonly ILogger> _logger; + private static readonly ILogger> _logger = + InternalLoggerFactory.CreateLogger>(); - protected AbstractShardingAutoCreateOperatorVirtualTableRoute() - { - _logger = ShardingContainer - .GetService>>(); - } /// /// 不可以设置一样 ///