C# .Net Core log4net 使用方法

一、背景

前排提示,觉得墨迹的朋友可以直接看解决方法部分!

啊,许久没有这般耗时耗力了。。。鼓捣了一下午,不断地查阅资料,终于成功把log4net配置成功了。不过,笔者对log4net的底层并不了解,这里只是简单记录学习过程,给同样的初学者提供些许方便。

二、探索过程

在查阅资料的过程中,发现了一些概念,但最后没用上。可能是版本更迭的原因,更有可能是单纯地没用上而已。

1.log4net.config配置文件中的节点配置,不加也可

<configsections>
  <section name="log4net" type="log4net.config.log4netconfigurationsectionhandler, log4net" />
</configsections>

2.同样是配置文件,里面的logger。没有特殊需求的话,不用单独设置logger标签,共用root标签配置就可以了

3.现在用的版本是.net core 5.0或6.0之类的,.net framework不太用了,而这两个大版本框架的目录结构有一些不同。网上的一些log4net攻略就是在framework版本基础上做的,里面会看见这样的一句话

“可以在项目的assemblyinfo.cs文件里添加以下的语句”

[assembly:log4net.config.domconfigurator(configfile="filename",,watch=true/false)]

这个文件在core中是没有的,然后笔者又去千方百计地寻找这句话,在core版本中应该放在哪里

最终得到的结果是,这句话在core版本,要以“标签”的形式,写在namespace上面,全局写一次就可以了。

笔者试验后,的确如此。当时成功之后欣喜若狂。可后来发现,这句话也用不上,完全不用加。。。。。

4.还有一个坑。笔者当时试验是在winform上做的,那配置标签里的就用LogFileAppender来输出到本地文件里就好。然后,笔者发现用ConsoleAppender可以输出log到命令行里,但是怎么试验都未成功。后来才发现,输出到命令行是指命令行项目,而不是说会输出到项目的output中。。。。。。

5.log建库,这个也用不上,当然只是自己用不上

三、解决办法

1.先用nuget下载log4net的包(VS里已经集成了nuget功能),项目能正常引用就是成功了

2.这里笔者给出网上摘抄的配置文件,其中有一些笔者自己的修改,但不包括数据库配置。关于配置文件的说明网上有很多,大家可以自行查找。只是想练手的小伙伴,直接复制去用就好。生成的log文件在运行目录里面

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<log4net >
		<appender  name ="LogFileAppender"  type ="log4net.Appender.FileAppender" >
			<file  value ="log4netfile.txt"   />
			<appendToFile  value ="true"   />
			<layout  type ="log4net.Layout.PatternLayout" >
				<conversionPattern  value ="%date %-5level %logger property:[%property{NDC}] - description :%message%newline"   />
			</layout >
		</appender >
		<appender  name ="ConsoleAppender"  type ="log4net.Appender.ConsoleAppender" >
			<layout  type ="log4net.Layout.PatternLayout" >
				<conversionPattern  value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"   />
			</layout >
		</appender >
		<appender  name ="EventLogAppender"  type ="log4net.Appender.EventLogAppender" >
			<layout  type ="log4net.Layout.PatternLayout" >
				<conversionPattern  value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"   />
			</layout >
		</appender >
		<appender  name ="AdoNetAppender_Access"  type ="log4net.Appender.AdoNetAppender" >
			<connectionString  value ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb"   />
			<commandText  value ="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)"   />
			<parameter >
				<parameterName  value ="@logDate"   />
				<dbType  value ="String"   />
				<size  value ="240"   />
				<layout  type ="log4net.Layout.PatternLayout" >
					<conversionPattern  value ="%date"   />
				</layout >
			</parameter >
			<parameter >
				<parameterName  value ="@thread"   />
				<dbType  value ="String"   />
				<size  value ="240"   />
				<layout  type ="log4net.Layout.PatternLayout" >
					<conversionPattern  value ="%thread"   />
				</layout>
			</parameter>
			<parameter>
				<parameterName  value ="@logLevel"   />
				<dbType  value ="String"   />
				<size  value ="240"   />
				<layout  type ="log4net.Layout.PatternLayout" >
					<conversionPattern  value ="%level"   />
				</layout>
			</parameter>
			<parameter>
				<parameterName  value ="@logger"   />
				<dbType  value ="String"   />
				<size  value ="240"   />
				<layout  type ="log4net.Layout.PatternLayout" >
					<conversionPattern  value ="%logger"   />
				</layout>
			</parameter>
			<parameter>
				<parameterName  value ="@message"   />
				<dbType  value ="String"   />
				<size  value ="240"   />
				<layout  type ="log4net.Layout.PatternLayout" >
					<conversionPattern  value ="%message"   />
				</layout>
			</parameter>
		</appender>
		<root >
			<level value="ALL"/>
			<appender-ref  ref ="LogFileAppender"   />
			<appender-ref  ref ="ConsoleAppender"   />
			<appender-ref  ref ="EventLogAppender"   />
			<appender-ref ref="AdoNetAppender_Access" />
		</root>
	</log4net>
</configuration>


3.在主方法中,初始化配置

XmlConfigurator.Configure(new FileInfo("你的log4net.config配置文件位置"));

4.在想要使用log的类中,先实例化log,然后调用对应的方法,输入自己需要的信息即可

//这是实例化
private static readonly ILog log = LogManager.GetLogger(typeof(这里放入当前类名));

//这是使用
log.info("自己需要的信息");

5.以上这些步骤就可以使用log了。这里使用的是log4net官方提供的方法,就是实例化那步。如果你有更细致的需求,可以自己写个封装,然后实例化自己的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值