demo地址:ABP.WindowsService 該文章是系列文章 基於.NetCore和ABP框架如何讓Windows服務執行Quartz定時做業 的其中一篇。html
參考:https://aspnetboilerplate.com/Pages/Documents/Logging ABP框架使用的是Castle Windsor的日誌工具,Castle Windsor定義了日誌接口 ILogger,並提供了Log4Net, NLog, Serilog的實現。git
首先,nuget添加Abp.Castle.Log4Net,github地址:Abp.Castle.Log4Net。 而後,添加AppConfigurations,根據環境變量獲取log4net.config的絕對路徑,模仿appsettings.json的使用方式。代碼以下:github
using Abp.Extensions; using System.Collections.Concurrent; using System.IO; namespace Demo.MyJob.Configuration { public static class AppLog4NetConfigs { private static readonly ConcurrentDictionary<string, string> Log4NetConfigCache; static AppLog4NetConfigs() { Log4NetConfigCache = new ConcurrentDictionary<string, string>(); } public static void AddProperty(string key, string value) { log4net.GlobalContext.Properties[key] = value; } public static string Get(string path, string environmentName = null) { var cacheKey = path + "#" + environmentName; return Log4NetConfigCache.GetOrAdd( cacheKey, _ => BuildLog4NetConfig(path, environmentName) ); } private static string BuildLog4NetConfig(string path, string environmentName = null) { var configFile = Path.Combine(path, "log4net.config"); if (environmentName.IsNullOrWhiteSpace()) { return configFile; } var tempPath = Path.Combine(path, $"log4net.{environmentName}.config"); if (File.Exists(tempPath)) { configFile = tempPath; } return configFile; } } }
最後,先在ConfigureAppConfiguration獲取絕對路徑,json
AppLog4NetConfigs.AddProperty("LogsDirectory", hostingEnvironment.ContentRootPath); LogConfigFile = AppLog4NetConfigs.Get(hostingEnvironment.ContentRootPath, hostingEnvironment.EnvironmentName);
接着添加日誌配置windows
IocManager.IocContainer.AddFacility<LoggingFacility>( f => f.UseAbpLog4Net().WithConfig(LogConfigFile) );
測試一下 在Execute添加日記記錄app
LogHelper.Logger.Info(nameof(SayHelloJob));
測試ok。框架
log4net.config參考工具
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="Red" /> </mapping> <mapping> <level value="Info" /> <foreColor value="Green" /> </mapping> <mapping> <level value="DEBUG" /> <foreColor value="Blue" /> </mapping> <mapping> <level value="WARN" /> <foreColor value="Yellow" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{ABSOLUTE} [%thread] %-5p %c{1}:%L - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="Fatal" /> </filter> </appender> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <file type="log4net.Util.PatternString" value="%property{LogsDirectory}\logs\" /> <datePattern value="'my-windows-service-'dd.MM.yyyy'.log'" /> <staticLogFileName value="false" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="5MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="ManagedColoredConsoleAppender" /> <appender-ref ref="RollingFile" /> </root> </log4net> </configuration>