[英]log4net - logging to database table
我在ASP.Net MVC中使用Log4net记录到不同的输出类型(文件和数据库)。 我能够将数据记录到RollingFileAppender
但不能记录到AdoNetAppender
将新的log4net.config添加到带有file-appender section
和DBLog-appender section
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="file" />
<appender-ref ref="DBLog" />
</root>
<!--Rolling File Appender-->
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="C:\Trinadh\Dot.Net\Web Applications\ASP.NetMVC\PartialViewApplSol\PartialViewApplSol\myapp.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-7p%d{yyyy-MM-dd HH:mm:ss tt} –%X{user}– %m method:%method %n stacktrace:%stacktrace{5} %n %logger %n type:%type %n line: %line %n" />
</layout>
</appender>
<!--Database Table Appender-->
<appender name="DBLog" 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="Server=DBServer;Database=DemoDB;integrated security=false;persist security info=True;User ID=sysAdmin;Password=XyzAbc;" />
<commandText value="INSERT INTO dbo.Log4net_Log ([Date],[Level],[Logger],[User],[Message],[Exception])
VALUES (@log_date, @log_level, @logger, @user, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%c" />
</layout>
</parameter>
<parameter>
<parameterName value="@user" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{user}" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
</log4net>
在“ DBLog”附加程序部分中,我正在使用要写入日志的数据库连接字符串,但是我已经在“ web.config”中使用相同的连接字符串来获取数据并在UI上进行填充。
向项目添加了一个新的log4netHelper.cs
public class log4netHelper
{
private static readonly ILog log4Net = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public log4netHelper()
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
MDC.Set("user", HttpContext.Current.User.Identity.Name);
}
public static void LogMessage(string message)
{
log4Net.Info(message);
}
public static void LogError(string message, Exception ex)
{
log4Net.Error(message, ex);
}
}
RollingFileAppender
正在记录以下内容
INFO 2018-07-23 19:27:06 PM –(null)–索引操作结束方法: LogMessage
stacktrace:System.Threading.Tasks.Task.ExecutionContextCallback> System.Threading.Tasks.Task.Execute> System.Threading.Tasks.Task.InnerInvoke> PartialViewApplSol.Controllers.HomeController + <> c.b__3_1> PartialViewApplSol.App_Start.log4netHelper.LogMessage
PartialViewApplSol.App_Start.log4netHelper
类型:PartialViewApplSol.App_Start.log4netHelper行:19
如何获取正在调用log4net.Message()的当前调用方方法? 它总是在'log4netHelper.cs'(LogMessage / LogError)中显示方法名称。 MSDN表示使用“ System.Runtime.CompilerServices.CallerMemberName”属性,但如何将其纳入我的逻辑。
当前的log4net.config同时具有RollingFileAppender和AdoNetAppender,但只有RollingFileAppender会将数据记录到文件中,而没有任何记录到数据库表中。
如果问题出在log4net中,则最好启用log4net内部调试:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
并将其写入文件:
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
如果有任何异常,您将在日志文件中找到它。 您已经将buffersize设置为1,它将直接刷新每条消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.