如何解决Log4net 在 .net 核心类库中不起作用
我正在使用 AOP 进行日志记录。我写了一个方面来记录日志。当程序运行时,日志功能工作,但既不记录数据库也不记录文件。不知道有没有漏掉的配置。
我也在类库中进行日志记录,但我不知道如何以及在何处将 log4net.config
引入 log4net 库。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<appender name="JsonFileAppender" type="log4net.Appender.FileAppender">
<file value="C://Log//log.json" />
<layout type="DevFramework.Core.CrossCuttingConcerns.Logging.Log4Net.Layouts.JsonLayout" />
</appender>
<appender name="sqlServerAppender" type="log4net.Appender.adonetappender">
<bufferSize value="1" />
<connectionType value="System.Data.sqlClient.sqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=(localdb)\MSsqlLocalDB;Initial Catalog=northwind;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultisubnetFailover=False" />
<commandText value="INSERT INTO Logs ([Detail],[Date],[Audit]) VALUES (@logDetail,@log_date,@audit)" />
<parameter>
<parameterName value="@logDetail" />
<dbType value="String" />
<size value="4000" />
<layout type="DevFramework.Core.CrossCuttingConcerns.Logging.Log4Net.Layouts.JsonLayout" />
</parameter>
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.PatternLayout" value="%date{dd'-'MM'-'yyyy HH':'mm':'ss'.'fff}" />
</parameter>
<parameter>
<parameterName value="@audit" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter>
</appender>
<logger name="JsonFileLogger">
<level value="ALL" />
<appender-ref ref="JsonFileAppender" />
</logger>
<logger name="DatabaseLogger">
<level value="All" />
<appender-ref ref="sqlServerAppender" />
</logger>
记录方法
[LogAspect(typeof(DatabaseLogger),2)]
[LogAspect(typeof(FileLogger),1)]
public List<Product> GetAll()
{
return _productDal.GetList();
}
记录器
public class FileLogger : LoggerService
{
public FileLogger() : base(LogManager.GetLogger("JsonFileLogger")){}
}
public class DatabaseLogger : LoggerService
{
public DatabaseLogger() : base(LogManager.GetLogger("DatabaseLogger")){}
}
日志方面
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Instance)]
public class LogAspect : OnMethodBoundaryAspect
{
private Type _loggerType;
private LoggerService _loggerService;
public LogAspect(Type loggerType,int priority)
{
_loggerType = loggerType;
AspectPriority = priority;
}
public override void RuntimeInitialize(MethodBase method)
{
if (_loggerType.BaseType != typeof(LoggerService))
{
throw new Exception("Wrong Logger Type");
}
_loggerService = (LoggerService)Activator.CreateInstance(_loggerType);
base.RuntimeInitialize(method);
}
public override void OnEntry(MethodExecutionArgs args)
{
if (!_loggerService.IsInfoEnable)
{
return;
}
try
{
var logParameters = args.Method.GetParameters().Select((p,i) => new LogParameter
{
Name = p.Name,Type = p.ParameterType.Name,Value = args.Arguments.GetArgument(i)
});
var logDetail = new LogDetail
{
FullName = args.Method.DeclaringType == null ? null : args.Method.DeclaringType.Name,MethodName = args.Method.Name,Parameters = logParameters.ToList()
};
_loggerService.Info(logDetail);
}
catch (Exception)
{
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。