GVKun编程网logo

.net – Log4net html格式化SmtpAppender

10

在本文中,我们将给您介绍关于.net–Log4nethtml格式化SmtpAppender的详细内容,此外,我们还将为您提供关于.NetCore3.1log4netADONetAppender自定义数

在本文中,我们将给您介绍关于.net – Log4net html格式化SmtpAppender的详细内容,此外,我们还将为您提供关于.Net Core 3.1 log4net ADONetAppender自定义数据库列、.net – log4net – FileAppender在文件开头写入新条目、.NetCore WebApi 添加 Log4Net、Apache log4net 1.2.12 发布的知识。

本文目录一览:

.net – Log4net html格式化SmtpAppender

.net – Log4net html格式化SmtpAppender

我正在尝试以 HTML格式向我发送电子邮件.
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">

  <to value="zzz@zzz.com"/>
  <from value="do_not_reply@zz.com"/>
  <subject value="zzzAdmin Logged Event" />
  <smtpHost value="email.zzz.com"/>
  <bufferSize value="1"/>
  <lossy value="false"/>
  <authentication value="Basic" />

我将错误记录为html格式的文本,但电子邮件客户端将HTML呈现为纯文本.

如何告诉SMTPAppender将HTML类型添加到电子邮件消息中,以便客户端将消息呈现为HTML.

解决方法

内置的SmtpAppender不支持此功能,因此您需要滚动自己的appender.

.Net Core 3.1 log4net ADONetAppender自定义数据库列

.Net Core 3.1 log4net ADONetAppender自定义数据库列

如何解决.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 (将#修改为@)

.net – log4net – FileAppender在文件开头写入新条目

.net – log4net – FileAppender在文件开头写入新条目

@H_301_0@
是否可以在log4net中配置FileAppender以在日志文件的开头添加新条目?目前,它最后添加条目,阅读最新条目需要滚动整个日志记录.从头开始阅读会更舒服.

解决方法

我不知道log4net中是否有这个选项(我不这么认为),但即使它可用,我也建议不要使用它.

附加到文件是一个非常便宜的操作.字节只是添加到文件的末尾.另一方面,前置文件相当昂贵.必须使用开头添加的新数据读取和重写整个文件.这也意味着它的扩展性很差,即当文件变大时操作需要更长的时间.

如果您希望以不同的顺序显示条目,则应在显示日志的程序中查找该选项,或者查找可以按相反顺序显示条目的替换项.

.NetCore WebApi 添加 Log4Net

.NetCore WebApi 添加 Log4Net

一 、配置

1.vs2019 创建一个.net core web程序,选择webapi

2.项目中添加一个配置文件:添加--新建项--XML文件,命名为log4net.config

我使用的是log4net的RollingLogFileAppender,他的好处是按天记录日志,一般日志记录会选择30天

<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--文件位置-->
<file value="LogFile/" />
<!--附加文件-->
<appendToFile value="true" />
<!--按天记录-->
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd''.log''" />
<staticLogFileName value="false" />
<!--只记录31天-->
<MaxSizeRollBackups value="31" />
<!--输出格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>

<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>

</log4net>
</configuration>

更多选项参考:http://logging.apache.org/log4net/release/config-examples.html

3.startup配置

public static ILoggerRepository repository { get; set; }

public Startup(IConfiguration configuration)
{

Configuration = configuration;

repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
}

 

二、应用

public class ValuesController : ControllerBase
{

private log4net.ILog log = log4net.LogManager.GetLogger(Startup.repository.Name, typeof(ValuesController));

public ActionResult<string> Get(int id)
{
log.Info($"ValuesController-Get id:{id}");
return "value";
}

}

 

Apache log4net 1.2.12 发布

Apache log4net 1.2.12 发布

Apache log4net 1.2.12 发布了,该版本主要是 bug 修复,修复了来自 JIRA 上报告的问题。完整的记录请看发行说明。

log4net是一个可以帮助程序员把日志信息输出到各种 不同目标的.net类库。它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace 类的功能更多。log4net是从java下有卓越表现的log4j移植过来的。它是apache基金资助的项目的一部分。

今天关于.net – Log4net html格式化SmtpAppender的讲解已经结束,谢谢您的阅读,如果想了解更多关于.Net Core 3.1 log4net ADONetAppender自定义数据库列、.net – log4net – FileAppender在文件开头写入新条目、.NetCore WebApi 添加 Log4Net、Apache log4net 1.2.12 发布的相关知识,请在本站搜索。

本文标签: