log4net基本使用案例

  1. 单独的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" />

			<!--此处按日期产生文件夹,文件名固定。注意&quot; 的位置-->
			<param name="DatePattern" value="yyyy-MM-dd/&quot;Info.txt&quot;" />

			<!--是否只写到一个文件中-->
			<param name="StaticLogFileName" value="false" />

			<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
			<layout type="log4net.Layout.PatternLayout,log4net">
				<param name="Header" value="&#13;&#10; ----------------------header--------------------------&#13;&#10;" />
				<param name="Footer" value="&#13;&#10; ----------------------footer--------------------------&#13;&#10;" />
				<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" />

			<!--此处按日期产生文件夹,文件名固定。注意&quot; 的位置-->
			<param name="DatePattern" value="yyyy-MM-dd/&quot;DeBug.txt&quot;" />

			<!--是否只写到一个文件中-->
			<param name="StaticLogFileName" value="false" />

			<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
			<layout type="log4net.Layout.PatternLayout,log4net">
				<param name="Header" value="&#13;&#10; ----------------------header--------------------------&#13;&#10;" />
				<param name="Footer" value="&#13;&#10; ----------------------footer--------------------------&#13;&#10;" />
				<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" />

			<!--此处按日期产生文件夹,文件名固定。注意&quot; 的位置-->
			<param name="DatePattern" value="yyyy-MM-dd/&quot;Error.txt&quot;" />

			<!--是否只写到一个文件中-->
			<param name="StaticLogFileName" value="false" />

			<!--记录的格式。一般用log4net.Layout.PatternLayout布局-->
			<layout type="log4net.Layout.PatternLayout,log4net">
				<param name="Header" value="&#13;&#10; ----------------------header--------------------------&#13;&#10;" />
				<param name="Footer" value="&#13;&#10; ----------------------footer--------------------------&#13;&#10;" />
				<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>
  1. 配置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)]



  1. 写入自定义字段加入数据库
  		public void Error(object message)
        {
            //使用线程相关属性设定自定义信息
            log4net.ThreadContext.Properties["UserIp"] = "127.0.0.1";
            this.logger.Error(message);
        }

版权声明:本文为qq_41545233原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。