Repository: logging-log4net Updated Branches: refs/heads/pr/old/29 [created] ea259c6bf refs/heads/pr/old/32 [created] 3f428edaf refs/heads/pr/old/40 [created] a847990ce refs/heads/pr/old/43 [created] 1a8eb94da refs/heads/pr/old/45 [created] 4ee46ecff Updated Tags: refs/tags/1.2.13RC1 [created] 6dc3da926
Add extension source project Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/3f428eda Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/3f428eda Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/3f428eda Branch: refs/heads/pr/old/32 Commit: 3f428edaf7a82ab6091b216039debd94db729bd1 Parents: 5e66799 Author: Peter Jas <[email protected]> Authored: Sun Aug 21 00:14:53 2016 +0000 Committer: Dominik Psenner <[email protected]> Committed: Thu Jun 22 22:11:35 2017 +0200 ---------------------------------------------------------------------- .../AspNetExtensions.cs | 48 +++++++++ .../log4net.Extensions.Logging/Log4NetLogger.cs | 101 +++++++++++++++++++ .../Log4NetLoggerProvider.cs | 31 ++++++ .../log4net.Extensions.Logging/project.json | 30 ++++++ global.json | 3 + netstandard/global.json | 3 - netstandard/log4net/project.json | 1 + 7 files changed, 214 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/AspNetExtensions.cs ---------------------------------------------------------------------- diff --git a/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/AspNetExtensions.cs b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/AspNetExtensions.cs new file mode 100644 index 0000000..8d2ba5d --- /dev/null +++ b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/AspNetExtensions.cs @@ -0,0 +1,48 @@ +using System; +using System.IO; +using System.Reflection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Logging; +using log4net.Config; +using log4net.Core; + +namespace log4net.Extensions.Logging +{ + /// <summary> + /// Helpers for ASP.NET Core + /// </summary> + public static class AspNetExtensions + { + + /// <summary> + /// Enable log4net as logging provider in ASP.NET Core. + /// </summary> + /// <param name="factory"></param> + /// <returns>Instance of <c>ILoggerFactory</c></returns> + public static ILoggerFactory AddLog4Net(this ILoggerFactory factory, Type type) + { + using (var provider = new Log4NetLoggerProvider(type)) + { + factory.AddProvider(provider); + } + + return factory; + } + + /// <summary> + /// Apply log4net configuration from XML config. + /// </summary> + /// <param name="env"></param> + /// <param name="configFileRelativePath">relative path to log4net configuration file.</param> + /// <returns>Instance of <c>ILoggerFactory</c></returns> + public static void ConfigureLog4Net(this IHostingEnvironment env, string configFileRelativePath, Type type) + { + GlobalContext.Properties["appRoot"] = env.ContentRootPath; + + var fileName = Path.Combine(env.ContentRootPath, configFileRelativePath); + var repository = LoggerManager.RepositorySelector.GetRepository(type.GetTypeInfo().Assembly); + + XmlConfigurator.Configure(repository, new FileInfo(fileName)); + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLogger.cs ---------------------------------------------------------------------- diff --git a/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLogger.cs b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLogger.cs new file mode 100644 index 0000000..98e1faa --- /dev/null +++ b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLogger.cs @@ -0,0 +1,101 @@ +using System; +using Microsoft.Extensions.Logging; +using log4net; + +namespace log4net.Extensions.Logging +{ + public class Log4NetLogger : Microsoft.Extensions.Logging.ILogger + { + private readonly ILog _logger; + + public Log4NetLogger(Type type) + { + _logger = LogManager.GetLogger(type); + } + + /// <summary> + /// Writes a log entry. + /// </summary> + /// <param name="logLevel">Entry will be written on this level.</param> + /// <param name="eventId">Id of the event.</param> + /// <param name="state">The entry to be written. Can be also an object.</param> + /// <param name="exception">The exception related to this entry.</param> + /// <param name="formatter">Function to create a <c>string</c> message of the <paramref name="state"/> and <paramref name="exception"/>.</param> + public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) + { + if (!IsEnabled(logLevel)) + { + return; + } + if (formatter == null) + { + throw new ArgumentNullException(nameof(formatter)); + } + + var message = formatter(state, exception); + + switch (logLevel) + { + case LogLevel.Trace: + case LogLevel.Debug: + _logger.Debug(message, exception); + break; + case LogLevel.Information: + _logger.Info(message, exception); + break; + case LogLevel.Warning: + _logger.Warn(message, exception); + break; + case LogLevel.Error: + _logger.Error(message, exception); + break; + case LogLevel.Critical: + _logger.Fatal(message, exception); + break; + case LogLevel.None: + break; + default: + _logger.Warn($"Encountered unknown log level {logLevel}, writing out as Debug."); + _logger.Debug(message, exception); + break; + } + } + + /// <summary> + /// Checks if the given <paramref name="logLevel"/> is enabled. + /// </summary> + /// <param name="logLevel">level to be checked.</param> + /// <returns><c>true</c> if enabled.</returns> + public bool IsEnabled(LogLevel logLevel) + { + switch (logLevel) + { + case LogLevel.Trace: + case LogLevel.Debug: + return _logger.IsDebugEnabled; + case LogLevel.Information: + return _logger.IsInfoEnabled; + case LogLevel.Warning: + return _logger.IsWarnEnabled; + case LogLevel.Error: + return _logger.IsErrorEnabled; + case LogLevel.Critical: + return _logger.IsFatalEnabled; + case LogLevel.None: + return false; + default: + throw new ArgumentException($"Unknown log level {logLevel}.", nameof(logLevel)); + } + } + + /// <summary> + /// Begins a logical operation scope. + /// </summary> + /// <param name="state">The identifier for the scope.</param> + /// <returns>An IDisposable that ends the logical operation scope on dispose.</returns> + public IDisposable BeginScope<TState>(TState state) + { + return null; // TODO: Figure out what to do here? + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLoggerProvider.cs ---------------------------------------------------------------------- diff --git a/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLoggerProvider.cs b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLoggerProvider.cs new file mode 100644 index 0000000..a2d8964 --- /dev/null +++ b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/Log4NetLoggerProvider.cs @@ -0,0 +1,31 @@ +using System; +using Microsoft.Extensions.Logging; + +namespace log4net.Extensions.Logging +{ + public class Log4NetLoggerProvider : IDisposable,Microsoft.Extensions.Logging.ILoggerProvider + { + private readonly Type _type; + + public Log4NetLoggerProvider(Type type) + { + _type = type; + } + + /// <summary> + /// Create a logger with the name <paramref name="name"/>. + /// </summary> + /// <param name="name">Name of the logger to be created.</param> + /// <returns>New Logger</returns> + public Microsoft.Extensions.Logging.ILogger CreateLogger(string name) + { + return new Log4NetLogger(_type); + } + + /// <summary> + /// Cleanup + /// </summary> + public void Dispose() + { } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/project.json ---------------------------------------------------------------------- diff --git a/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/project.json b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/project.json new file mode 100644 index 0000000..e7cde51 --- /dev/null +++ b/extensions/log4net.Extensions.Logging/log4net.Extensions.Logging/project.json @@ -0,0 +1,30 @@ +{ + "version": "1.0.0-*", + + "packOptions": { + "requireLicenseAcceptance": false, + "tags": [ "logging", "log", "tracing", "logfiles", "apache", "aspnet" ], + "iconUrl": "https://logging.apache.org/img/feather.gif", + "licenseUrl": "https://raw.githubusercontent.com/apache/log4net/trunk/LICENSE", + "projectUrl": "https://github.com/apache/log4net", + "repository": { + "type": "git", + "url": "git://git.apache.org/log4net.git" + } + }, + + "buildOptions": { + "debugType": "portable" + }, + + "dependencies": { + "log4net": { "target": "project" }, + "Microsoft.Extensions.Logging": "1.0.0", + "Microsoft.AspNetCore.Hosting": "1.0.0" + }, + + "frameworks": { + "net451": {}, + "netstandard1.3": {} + } +} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/global.json ---------------------------------------------------------------------- diff --git a/global.json b/global.json new file mode 100644 index 0000000..f3f8e98 --- /dev/null +++ b/global.json @@ -0,0 +1,3 @@ +{ + "projects": [ "netstandard", "extensions" ] +} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/netstandard/global.json ---------------------------------------------------------------------- diff --git a/netstandard/global.json b/netstandard/global.json deleted file mode 100644 index 200ddfd..0000000 --- a/netstandard/global.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "projects": [ "log4net", "log4net.tests" ] -} http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3f428eda/netstandard/log4net/project.json ---------------------------------------------------------------------- diff --git a/netstandard/log4net/project.json b/netstandard/log4net/project.json index 51731de..003501e 100644 --- a/netstandard/log4net/project.json +++ b/netstandard/log4net/project.json @@ -1,6 +1,7 @@ { "name": "log4net", "version": "3.0.0", + "frameworks": { "netstandard1.3": { "buildOptions": {
