我用log4net写了一个控制台应用程序,我的log4net配置在
下面<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Process_Log\" />
<appendToFile value="true" />
<datePattern value="yyyy-MM-dd.TXT" />
<maxSizeRollBackups value="10" />
<rollingStyle value="Date" />
<maximumFileSize value="10MB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p %message [%logger] %n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
运行控制台应用程序,它有输出日志文件。 但是使用SQL Server代理作业或Windows任务计划程序调用它, 它没有写日志文件。
答案 0 :(得分:10)
我弄明白了这个问题。当您从Visual Studio运行解决方案时,log4net会从&#34; bin&#34;中找到配置文件。夹。因此,它需要运行所需的信息。但是当您通过Windows任务计划程序运行应用程序时,情况就不同了。这次,Windows任务计划程序尝试从此位置找到配置文件&#34; C:\ Windows \ System32&#34;。因为,当您运行Windows任务计划程序时,它会处理默认的应用程序文件夹位置&#34; C:\ Windows \ System32&#34;。
您可以编写以下代码来导航应用程序以加载log4net配置文件。这里,配置文件名是&#34; LogConfiguration.config&#34;。
var log4NetConfigDirectory =
AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "LogConfiguration.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
var log4NetConfigDirectory =
AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "LogConfiguration.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
答案 1 :(得分:5)
user3626918接受的答案是正确的(工作目录错误)。作为建议的代码更改解决方案的替代方案,您可以改为:
配置&#34;开始&#34;您计划任务的目录(属性 - >操作 - >编辑...)
确认运行计划任务的帐户有权写入日志文件目标。