【发布时间】:2019-04-23 10:14:36
【问题描述】:
当应用程序从注册表启动运行时,log4net 不会生成日志文件,也不会将日志写入文件。但是当手动执行应用程序时,会创建文件。
启动注册表项在路径“[HKEY_LOCAL_USER\Software\Microsoft\Windows\CurrentVersion\Run”中创建。当用户登录机器时,应用程序必须自动运行。 所有日志配置都有一个单独的 log4net.config 文件 日志文件在用户漫游配置文件中创建。 尝试的事情: 1. 我尝试保存在一些通用路径中,例如 (C:\logs\app) 仍然没有创建日志。 2. 从用户上下文和管理员权限的命令提示符下运行 .exe,没有用。
Log4net 配置
<log4net>
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="${APPDATA}\app\app.txt"/>
<appendToFile value="true" />
<rollingStyle value="Date"/>
<rollInterval value="Week"/>
<DatePattern value="'.'yyyy-MM-dd'.log'"/>
<rollSizeKB value="50000"/>
<preserveLogFileNameExtension value="true" />
<countDirection value="1" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date{dd MMM yyyy HH:mm:ss}] [%-5level]
[%-5.70logger] - %message%newline"/>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
初始化配置
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
我希望在路径 C:\Users[User]\AppData\Roaming\app\app.txt" 处看到一个日志文件,但它不存在。非常感谢这方面的任何帮助。
【问题讨论】:
-
您是否 100% 确定该应用程序正在实际运行?你能弹出一个消息框什么的吗?
-
我的猜测是启动目录在作为 AutoRun 运行时是不同的,并且您将相对路径传递给 log4net 配置。我建议添加一些使用
File.AppendAllText(@"c:\temp\path.txt", Environment.CurrentDirectory)的测试代码来查看工作目录是什么。如果我的猜测不正确,请将 log4net 配置调试输出转储到使用 this 之类的文件中,您应该能够看到问题所在。 -
这样的应用程序运行完美。唯一的问题是日志
-
是的,我明白了。如果你想知道为什么 log4net 没有记录,你必须 a) 确保它正在获取配置文件 b) 如果是这样,检查内部调试输出。
-
您好 Stuartd,您能指导我如何在使用以下代码行初始化配置后获取日志文件的路径。 log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
标签: c# console-application log4net