我在配置a StringMatchFilter以匹配消息中的字符串与换行符时遇到问题.我想跳过一些消息,我添加了一个这样的过滤器,它可以工作.
<filter type="log4net.Filter.StringMatchFilter">
<param name="AcceptOnMatch" value="false" />
<stringToMatch value="Unexpected exception in SocketThreadWorker" />
</filter>
Run Code Online (Sandbox Code Playgroud)
但是,如果我stringToMatch将消息的第二行更改为"远程主机强制关闭的现有连接",则过滤器不起作用.是因为消息中的换行符还是我在这里做错了什么?
典型的消息可能如下所示:
------示例消息----------------------------
2011-05-04 16:22:24,078 [Client (connected from "127.0.0.1:4076" at 16:22)] ERROR - Unexpected exception in SocketThreadWorker System.Net.Sockets.SocketException:
An existing connection was forcibly closed by the remote host at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
Run Code Online (Sandbox Code Playgroud)
------结束示例消息---------------------------
"SocketThreadWorker中出现意外异常"位于消息的第一行,"强制关闭现有连接"位于第二行.
编辑
appender看起来像这样:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<filter type="log4net.Filter.StringMatchFilter">
<param name="AcceptOnMatch" value="false" />
<stringToMatch value="An existing connection was forcibly closed by the remote host" />
</filter>
<to value="..." />
<from value="..." …Run Code Online (Sandbox Code Playgroud) 我正在努力让Castle Windsor的log4net集成工作.我用类型的公共属性编写了我的类,ILogger并在我的app.config中进行了配置,如下所示.
<configuration>
<configsections>
<section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configsections>
<castle>
<facilities>
<facility id="logging" type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" />
</facilities>
<components>
<component id="form1" type="WinFormsActiveRecordSample.Form1, WinFormsActiveRecordSample" />
</components>
</castle>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="main.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd.MM.yy HH:mm:ss} %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在我看来,这应该是有效的,但事实并非如此.当我loggingApi="console"正确设置日志时.当我将其更改为log4net时,它什么也没做.log4net配置来自块正在运行的另一个项目.我该怎么做才能使用日志文件?必须有特殊的log4net配置吗?
谢谢你的任何提示
鲍里斯
我为Asp.Net 2.0配置了log4Net EventLogAppender.但它不会记录任何内容.我在我的Web.Config中有以下内容.
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="LogName" value="Test Log" />
<param name="ApplicationName" value="Test-Web" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<priority value="ERROR"/>
<appender-ref ref="EventLogAppender"/>
</root>
<logger name="NHibernate">
<level value="ERROR" />
<appender-ref ref="EventLogAppender" />
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
我已经创建了测试日志事件日志,并且AspNet用户对事件日志注册表项具有权限.我还在Global.asax Application_Start中配置了log4Net.
log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)
更新:我打开了log4net内部调试,发现跟踪中出现以下错误.
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogAppender]. Reported error follows.
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible …Run Code Online (Sandbox Code Playgroud) 我意识到有更多的级别,调试,信息,警告,错误和致命,它们列在log4net.Core.Level课堂上.
但我怎么能用呢?我的意思是,在ILog界面中你有使用常用方法的方法,但如果你想使用"精细"或"紧急"等怎么办?
干杯.
在log4net中是否有一个appender可以允许winform客户端在不使用共享的情况下读取另一台服务器上的log4net日志?我的应用程序作为Web服务托管.我正在寻找一个HTTP appender或类似的东西.
如何为生成的电子邮件主题指定布局和conversionPattern?
BufferSize需要小于或等于1,因此不会发生缓冲.
我正在尝试在log4net.config文件中配置smtp appender.问题是我已经浏览了整个互联网,并且无法找到如何在包含所有其他日志信息(如info,debug,error,fatal)发生错误时发送电子邮件.仅在应用程序结束时(不是每次发生ERROR时).
因此,我只希望在以下情况下收到此电子邮件:应用程序结束+包含所有日志信息(DEBUG,INFO,ERROR,FATAL)+仅在出现ERROR时.
详细说明这是因为我在c sharp中处理异常的方式,在整个地方进行多级处理,因此如果发生错误,无论多少次我只想接收一封电子邮件.此外,我不想使用多个日志,而只是使用root中的一个.
谢谢.
我已经实现log4net了.NET core 2.0,登录到文本文件.因为log4net有一个配置文件,它XML configuration在其中.所以,我创建了一个单独的文件log4net.config来设置它的配置,它工作正常.但我想将其配置设置为appsettings.json.是否可以将log4net配置写入appsettings.json.
<appSettings>
<add key="IsLog" value="True" />
<add key="MaxThreads" value="3" />
</appSettings>
<log4net debug="false">
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="./logs/logfile.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="50GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)
这是我的XML配置.
我发现这个问题,其所提及log4net don't support Json projects.是否可以将其配置写入appsettings.json.
所以我试图在我的Web .NET 4.0应用程序中设置Log4Net.我已将正确的.dll添加到我的项目中,并将以下内容作为启动器添加到我的Web.Config文件中:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</configSections>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\TestProj\\TestLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是,如果我将"log4net"部分附加到Web.Config,我将收到错误消息
无法在Web服务器上启动调试.有关常见配置问题请参阅帮助.....
确保服务器正常运行.验证web.config中没有语法错误........
注意 我可以删除本节的所有内部结构,只留下声明:
<log4net></log4net>
Run Code Online (Sandbox Code Playgroud)
我仍然会得到同样的错误.
有人可以给我一些关于如何追踪这个错误的指示吗?
目前在我的项目中,log4net用于将所有异常,信息,警告等记录到文本文件中,但现在我想要的是将所有这些细节记录到数据库表而不是文件中.
请帮我这样做.
提前谢谢了.
组态:
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
</root>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=xxxx; uid=xxxx; pwd=xxxx; database=xxxx" />
<commandText value="INSERT INTO log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value="@thread"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter> …Run Code Online (Sandbox Code Playgroud)