SQL作业或任务计划程序调用log4net,不写日志文件

时间:2014-10-24 10:11:40

标签: log4net

我用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任务计划程序调用它, 它没有写日志文件。

2 个答案:

答案 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;您计划任务的目录(属性 - >操作 - >编辑...)

  • 确认运行计划任务的帐户有权写入日志文件目标。