【发布时间】:2017-01-11 18:27:16
【问题描述】:
我的解决方案的根目录中有一个文件log4net.xml。用于复制到 bin 的文件属性设置为 Always copy。我已确认文件已复制到 bin 目录。
在配置中我设置了一个文件附加器(基本上是文档中的复制粘贴):
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="Logs\\log.log" />
<appendToFile value="true" />
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd-HHmmss" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
我在AssemblyInfo.cs也有这条线
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]
并且记录器在代码文件中是这样设置的:
private static ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我也将log4net.Config.XmlConfigurator.Configure();(以及FileInfo 参数)添加到主Program.cs。
但是,如果我执行该程序,则不会创建预期的日志文件。我怀疑 log4net 甚至没有读取配置文件。
我错过了什么吗?从 VS 内部执行也不起作用(尽管它以某种方式获取了 Console Appender 部分)。
类似帖子:
- StackOverflow question 1 -- 不适用
- StackOverflow question 2 -- 不适用
- StackOverflow question 3 -- 已经符合了
提前致谢。
编辑
所以我通过从文档中删除复制/粘贴的部分来在 VS 中工作:
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
但是,从 exe 运行仍然不起作用
【问题讨论】:
-
路径可能有问题 - 您在配置中有“Logs\\log.log”,它可能应该是“Logs\log.log” - 无需转义 \在配置文件值中。
-
权限也可以发挥作用——运行程序的用户需要创建文件和写入权限才能成功登录文件
-
您的附加程序名称是
RollingFile,而您在root标记中将其引用为A1。他们应该匹配。请参考这篇相关帖子 - Configuring log4net with xml file