Added autofac and nlog

This commit is contained in:
pavelbannov 2019-05-28 18:05:20 +03:00
parent 7d6ada9ec0
commit 1c2cd83284
6 changed files with 81 additions and 17 deletions

View File

@ -32,7 +32,7 @@ using ASC.Common.DependencyInjection;
using Autofac;
using log4net.Config;
using log4net.Core;
using log4net.Util;
using Microsoft.Extensions.Configuration;
using NLog;
namespace ASC.Common.Logging
@ -754,27 +754,28 @@ namespace ASC.Common.Logging
public class LogManager
{
internal static IContainer Builder { get; set; }
internal IContainer Builder { get; set; }
internal static ConcurrentDictionary<string, ILog> Logs;
static LogManager()
{
var container = AutofacConfigLoader.Load("core");
if (container != null)
{
Builder = container.Build();
}
Logs = new ConcurrentDictionary<string, ILog>();
}
public LogManager(IContainer builder)
{
Builder = builder;
}
public static ILog GetLogger(string name)
{
{
var logManager = CommonServiceProvider.GetService<LogManager>();
ILog result;
if (!Logs.TryGetValue(name, out result))
{
result = Logs.AddOrUpdate(name, Builder != null ? Builder.Resolve<ILog>(new TypedParameter(typeof(string), name)) : new NullLog(), (k, v) => v);
result = Logs.AddOrUpdate(name, logManager.Builder != null ? logManager.Builder.Resolve<ILog>(new TypedParameter(typeof(string), name)) : new NullLog(), (k, v) => v);
}
return result;

View File

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac.Configuration" Version="4.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0-preview4-19216-03" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview3.19153.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview3.19153.1">
@ -13,11 +14,12 @@
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview3.19153.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0-preview5-19264-04" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.8.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\common\ASC.Common\ASC.Common.csproj" />
<ProjectReference Include="..\..\common\ASC.Core.Common\ASC.Core.Common.csproj" />
<ItemGroup>
<ProjectReference Include="..\..\common\ASC.Common\ASC.Common.csproj" />
<ProjectReference Include="..\..\common\ASC.Core.Common\ASC.Core.Common.csproj" />
</ItemGroup>
</Project>

View File

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
namespace ASC.Web.Api
{
public class Program
@ -15,6 +16,9 @@ namespace ASC.Web.Api
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
})
.ConfigureAppConfiguration((hostingContext, config) => {
config.AddJsonFile("autofac.json");
});
}
}

View File

@ -8,20 +8,26 @@ using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ASC.Common.Logging;
using ASC.Web.Api.Handlers;
using ASC.Web.Api.Middleware;
using Autofac;
using Autofac.Configuration;
namespace ASC.Web.Api
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
@ -38,6 +44,15 @@ namespace ASC.Web.Api
config.Filters.Add(new TypeFilterAttribute(typeof(FormatFilter)));
config.Filters.Add(new AuthorizeFilter(policy));
});
var module = new ConfigurationModule(Configuration);
var builder = new ContainerBuilder();
builder.RegisterModule(module);
var container = builder.Build();
services.AddSingleton(container);
services.AddSingleton<LogManager>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

View File

@ -0,0 +1,12 @@
{
"components": [
{
"type": "ASC.Common.Logging.LogNLog, ASC.Common",
"services": [
{
"type": "ASC.Common.Logging.ILog, ASC.Common"
}
]
}
]
}

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog>
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
<add assembly="ASC.Common"/>
</extensions>
<variable name="logDirectory" value="..\Logs\"/>
<conversionPattern value=""/>
<targets async="true">
<default-target-parameters type="SelfCleaning" archiveNumbering="DateAndSequence" archiveEvery="Day" enableArchiveFileCompression="true" archiveAboveSize="52428800" keepFileOpen="true" archiveDateFormat="MM-dd" layout="${date:format=yyyy-MM-dd HH\:mm\:ss,fff} ${level:uppercase=true} [${threadid}] ${logger} - ${message} ${exception:format=ToString}"/>
<target name="web" type="SelfCleaning" fileName="${logDirectory}web.log" />
<target name="sql" type="SelfCleaning" fileName="${logDirectory}web.sql.log" layout="${date:universalTime=true:format=yyyy-MM-dd HH\:mm\:ss,fff}|${threadid}|${event-properties:item=duration}|${message}|${event-properties:item=sql}|${event-properties:item=sqlParams}"/>
<target name="files" type="SelfCleaning" fileName="${logDirectory}web.files.log"/>
<target name="api" type="SelfCleaning" fileName="${logDirectory}web.api.log"/>
<target name="notify" type="SelfCleaning" fileName="${logDirectory}web.notify.log" />
<target name="ownFile-web" type="File" fileName="${logDirectory}web.asp.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<rules>
<logger name="ASC.SQL" minlevel="Debug" writeTo="sql" final ="true" />
<logger name="ASC.Files" minlevel="Debug" writeTo="files" final ="true" />
<logger name="ASC.Api" minlevel="Debug" writeTo="api" final ="true" />
<logger name="ASC.Notify.Messages" minlevel="Debug" writeTo="notify" final ="true" />
<logger name="ASC*" minlevel="Debug" writeTo="web" />
<logger name="Microsoft.*" maxlevel="Info" writeTo="web" final="true" />
</rules>
</nlog>