- 单独的log4net配置文件 log4net.config,log4net.config文件属性复制到输出目录调成一直复制,system.data.dll也选择复制到输出目录
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
<!-- To enable internal log4net logging specify the
following appSettings key -->
<add key="log4net.Internal.Debug" value="false"/>
</appSettings>
<log4net>
<!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<!-- Set root logger level to ERROR and its appenders -->
<root>
<level value="ALL"/>
<appender-ref ref="InfoSysAppender"/>
<appender-ref ref="DebugSysAppender"/>
<appender-ref ref="ErrorSysAppender"/>
<appender-ref ref="ADONetAppender_SqlServer"/>
</root>
<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="WebNukeLogger">
<level value="ALL"/>
<appender-ref ref="ADONetAppender_SqlServer"/>
</logger>
<appender name="ADONetAppender_SqlServer" type="log4net.Appender.AdoNetAppender,log4net">
<!-- 定义几条存入数据库 有bufferSize条时才写入数据库,没有bufferSize条叫缓存 -->
<bufferSize value="0" />
<!-- PublicKeyToken 无需改变,dll高于1.0.0.5版本的无需改变版本号 -->
<!-- powershell 执行下列shell,查看dll版本信息 -->
<!-- ([system.reflection.assembly]::loadfile("C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll")).FullName -->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<!--此字符串在WebNuke中无效,自动取nukedb连接字符串-->
<!--链接字符-->
<connectionString value=" />
<!-- 测试写入-->
<!-- 数据库脚本 -->
<commandText value="INSERT INTO nuke_DataLog([CurDatetime],[ThreadID],[LogType],[LogName],[Message],[UserIp]) VALUES(@log_date,@thread,@log_level,@logger,@message,@UserIp)" />
<!--日志时间LogDate -->
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<!--线程号-->
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<!--日志类型LogLevel -->
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<!--输出信息 -->
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<!--日志名称-->
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="500" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<!--自定义Userip-->
<parameter>
<parameterName value="@UserIp" />
<dbType value="String" />
<size value="500" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{UserIp}" />
</layout>
</parameter>
<!-- 写入的等级 -->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="InfoSysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<!--是否追加到文件:日志文件路径,文件夹不存在则新建 -->
<param name="File" value="Log/" />
<!--是否追加到文件-->
<param name="AppendToFile" value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Composite" />
<!--文件最大-->
<param name="maximumFileSize" value="500KB" />
<!--文件命名-->
<!--<param name="CountDirection" value="1"/>-->
<!--使用Unicode编码-->
<Encoding value="UTF-8" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--此处按日期产生文件夹,文件名固定。注意" 的位置-->
<param name="DatePattern" value="yyyy-MM-dd/"Info.txt"" />
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false" />
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
<!--过滤设置,LevelRangeFilter为使用的过滤器-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Info" />
</filter>
</appender>
<appender name="DebugSysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<!--是否追加到文件:日志文件路径,文件夹不存在则新建 -->
<param name="File" value="Log/" />
<!--是否追加到文件-->
<param name="AppendToFile" value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Composite" />
<!--文件最大-->
<param name="maximumFileSize" value="5MB" />
<!--文件命名-->
<!--<param name="CountDirection" value="1"/>-->
<!-- 切割最多文件数 -1表示不限制产生日志文件数-->
<MaxSizeRollBackups value="-1" />
<!--使用Unicode编码-->
<Encoding value="UTF-8" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--此处按日期产生文件夹,文件名固定。注意" 的位置-->
<param name="DatePattern" value="yyyy-MM-dd/"DeBug.txt"" />
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false" />
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
<!--过滤设置,LevelRangeFilter为使用的过滤器-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Debug" />
<param name="LevelMax" value="Debug" />
</filter>
</appender>
<appender name="ErrorSysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<!--是否追加到文件:日志文件路径,文件夹不存在则新建 -->
<param name="File" value="Log/" />
<!--是否追加到文件-->
<param name="AppendToFile" value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Composite" />
<!--文件最大-->
<param name="maximumFileSize" value="1MB" />
<!--文件命名-->
<!--<param name="CountDirection" value="1"/>-->
<!-- 切割最多文件数 -1表示不限制产生日志文件数-->
<MaxSizeRollBackups value="-1" />
<!--使用Unicode编码-->
<Encoding value="UTF-8" />
<!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--此处按日期产生文件夹,文件名固定。注意" 的位置-->
<param name="DatePattern" value="yyyy-MM-dd/"Error.txt"" />
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false" />
<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="Header" value=" ----------------------header-------------------------- " />
<param name="Footer" value=" ----------------------footer-------------------------- " />
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
<!--过滤设置,LevelRangeFilter为使用的过滤器-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
</log4net>
</configuration>
- 配置log4net
//第一种方法,启动时注入
FileInfo configFile = new FileInfo(FileUrl.PathUrl("/Configs/log4net.config"));log4net.Config.XmlConfigurator.Configure(configFile);
public class FileUrl
{
/// <summary>
/// 拼接传入的路径返回完整的路径
/// </summary>
public static string PathUrl(string url)
{
if (!(HttpContext.Current is null))
{
return HttpContext.Current.Server.MapPath(url);
}
if (!(AppDomain.CurrentDomain is null))
{
return AppDomain.CurrentDomain.BaseDirectory.ToString()+ url;
}
return "";
}
}
//第二种方法AssemblyInfo.cs文件中注入,写入到数据库中时,如果不生效,请写入此喊代码
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "\\Configs\\log4net.config", ConfigFileExtension = "config", Watch = true)]
- 写入自定义字段加入数据库
public void Error(object message)
{
//使用线程相关属性设定自定义信息
log4net.ThreadContext.Properties["UserIp"] = "127.0.0.1";
this.logger.Error(message);
}
版权声明:本文为qq_41545233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。