log4net-记录到数据库表



我在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:TrinadhDot.NetWeb ApplicationsASP.NetMVCPartialViewApplSolPartialViewApplSolmyapp.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'appender部分中,我正在使用将写入日志的DB的连接字符串,但我已经在'web.config'中使用相同的连接字符串来获取数据并填充UI。

  • 如何使用web.config中指定的相同连接字符串使用log4net将数据记录到表中,而不在中再次使用'log4net.config'
  • 当我将不同的参数(如时间(记录到文件中时,用户名、方法和堆栈;所有日志级别(Info,warn,
    error(都记录完整的参数,我对此不感兴趣;时间,用户名,
    方法,WARN/Error级别下的堆栈

向项目添加了一个新的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在之后进行日志记录

INFO2018-07-23 19:27:06 PM–(null(–索引操作结束方法:LogMessage
堆栈跟踪:System.Threading.Tasks.Task.Execute>System.Threading.Tasks.Task.Eexecute>System.Threading.asks.Task.InnerInvoke>PartialViewApplSol.Controllers.HomeController+<>c.b__3_1>PartialViewApplSol.App_Start.log4netHelper.LogMessage
PartialView ApplSol.App.Start.log4netHelper
类型:PartialViewApplicationSol.App_Start.log4 netHelper行: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:tmplog4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>

如果有任何异常,您将在日志文件中找到它。您已经将buffersize设置为1,这将直接刷新每条消息。

更多关于Log4net 故障排除

相关内容

  • 没有找到相关文章

最新更新