如何解决.Net Core 3.1 log4net ADONetAppender自定义数据库列
我正在尝试使用AdoNetAppender在.net core 3.1 Web应用程序中实现log4net。 我正在将 MicroKnights.Log4NetAdoNetAppender nuget与 System.Data.SqlClient.SqlConnection,System.Data.SqlClient nuget一起使用,并且一切正常。
当我想创建一个自定义列以保存生成日志的应用程序源的编号时,就会出现问题。
配置文件是这样的。
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<root>
<level value="ALL" />
<appender-ref ref="ADONetAppender" />
</root>
<appender name="ADONetAppender" type="MicroKnights.Logging.AdoNetAppender,MicroKnights.Log4NetAdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data.SqlClient,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />
<connectionString value="My-conextion-string" />
<commandText value="insert into LogItem(LogItemNumber,LogItemDate,LogItemTimeStamp,LogItemSource,LogItemThread,LogItemLevel,LogItemLogger,LogItemMessage,LogItemException) values (@logItemNumber,@logItemDate,@logItemTimeStamp,@logItemSource,@logItemThread,@logItemLevel,@logItemLogger,@logItemMessage,@logItemException)" />
<parameter>
<parameterName value="@logItemNumber" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<param name="%logcounter"/>
<converter>
<name value="%logcounter" />
<type value="NotificacionProgramadaWS.Utilidades.LogCounterPatternConverter" />
</converter>
</layout>
</parameter>
<parameter>
<parameterName value="@logItemDate" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@logItemTimeStamp" />
<dbType value="Int64" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%timestamp" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemSource" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logcounter" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemThread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemLevel" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemLogger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemMessage" />
<dbType value="String" />
<size value="8000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@logItemException" />
<dbType value="String" />
<size value="8000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
</log4net>
我正在使用转换器生成附加列的内容,并且它不生成数据。我的转换器就是这样。
public sealed class LogCounterPatternConverter : PatternLayoutConverter
{
private static int LogCounter;
protected override void Convert(TextWriter writer,LoggingEvent loggingEvent)
{
writer.Write(LogCounter.ToString(CultureInfo.InvariantCulture));
LogCounter++;
}
}
我还使用了其他类似如下的方法,但是它仍然不起作用
public class LogCounterPatternConverter : PatternConverter
{
private static int _logCounter;
protected override void Convert(TextWriter writer,object state)
{
writer.Write(_logCounter.ToString(CultureInfo.InvariantCulture));
_logCounter++;
}
}
public class LogCounterPatternLayout : PatternLayout
{
public LogCounterPatternLayout()
{
AddConverter(new ConverterInfo
{
Name = "logCounter",Type = typeof(LogCounterPatternConverter)
});
}
}
运行应用程序时显示的错误如下
log4net: Configuration update mode [Merge].
log4net: Logger [root] Level string is [ALL].
log4net: Logger [root] level set to [name="ALL",value=-2147483648].
log4net:ERROR XmlHierarchyConfigurator: No appender named [RollingLogFileAppender] could be found.
log4net:ERROR Appender named [RollingLogFileAppender] not found.
log4net: Loading Appender [ADONetAppender] type: [MicroKnights.Logging.AdoNetAppender,MicroKnights.Log4NetAdoNetAppender]
log4net: Setting Property [BufferSize] to Int32 value [1]
log4net: Setting Property [ConnectionType] to String value [System.Data.SqlClient.SqlConnection,PublicKeyToken=b77a5c561934e089]
log4net: Setting Property [ConnectionString] to String value [Server=JAIROJIM;Database=Log4netDb;User Id=UsuarioUdla;Password=123]
log4net: Setting Property [CommandText] to String value [insert into LogItem(LogItemNumber,@logItemException)]
log4net: Setting Property [ParameterName] to String value [@logItemNumber]
log4net: Setting Property [DbType] to DbType value [String]
log4net: Setting Property [Size] to Int32 value [255]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,leftAlign=False]
log4net:ERROR XmlHierarchyConfigurator: Cannot find Property [%logcounter] to set object on [log4net.Layout.PatternLayout]
log4net: Setting Property [Name] to String value [%logcounter]
log4net:ERROR Could not create Appender [ADONetAppender] of type [MicroKnights.Logging.AdoNetAppender,MicroKnights.Log4NetAdoNetAppender]. Reported error follows.
System.TypeLoadException: Could not load type 'NotificacionProgramadaWS.Utilidades.LogCounterPatternConverter' from assembly 'log4net,Version=2.0.8.0,PublicKeyToken=669e0ddf0bb1aa2a'.
at System.Reflection.RuntimeAssembly.GetType(QCallAssembly assembly,String name,Boolean throwOnError,Boolean ignoreCase,ObjectHandleOnStack type,ObjectHandleOnStack keepAlive,ObjectHandleOnStack assemblyLoadContext)
at System.Reflection.RuntimeAssembly.GetType(String name,Boolean ignoreCase)
at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly,String typeName,Boolean ignoreCase)
at log4net.Util.TypeConverters.TypeConverter.ConvertFrom(Object source)
at log4net.Util.OptionConverter.ConvertStringTo(Type target,String txt)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ConvertStringTo(Type type,String value)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element,Object target)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element,Type defaultTargetType,Type typeConstraint)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element,Object target)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR Appender named [ADONetAppender] not found.
log4net: Hierarchy Threshold []
log4net: No appenders could be found for logger [Microsoft.Extensions.Hosting.Internal.Host] repository [log4net-default-repository]
log4net: Please initialize the log4net system properly.
log4net: Current AppDomain context information:
log4net: BaseDirectory : Y:\NotificacionesPushCenturylink.Backend\ServicioNotificacionesCenturylink\NotificacionProgramadaWS
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。