任务计划程序:带有 Log4Net 的控制台应用程序无法正常工作

Task Scheduler : Console app with Log4Net not working

提问人:iDipa 提问时间:8/2/2023 最后编辑:TylerHiDipa 更新时间:8/3/2023 访问量:74

问:

我有一个控制台应用程序,其中包含用于日志的log4net(V-2.0.15)。配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    </configSections>
    <connectionStrings>
    </connectionStrings>
    <appSettings>
        <!--<add key="log4net.Internal.Debug" value="true"/>-->
    </appSettings>
<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="C:\logs1\log.txt" />
        <encoding value="utf-8" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <!--<maxSizeRollBackups value="10" />
        <maximumFileSize value="100MB" />
        <staticLogFileName value="true" />-->
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="All" />
        <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>

C#代码如下:

    private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    static void Main(string[] args)
    {
        try
        {
            ///Coding...
        }
        catch (Exception ex)
        {
            Log.Error("------- Error Message : " + ex.Message + "------- StackTrace : " + ((ex.StackTrace != null) ? ex.StackTrace.ToString() : ""));
        }
    }

现在,我将该控制台应用程序发布到本地文件夹,并在创建“任务计划程序 -> 基本任务”时,我选择exe文件并创建了它。但它什么也没做。我在这里错过了什么???

C# 控制台应用程序 log4net windows 任务计划程序

评论

0赞 rick 8/2/2023
更改为<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /><conversionPattern value="%-5p|%d{ dd.MM.yyyy HH:mm:ss}|%m|%method|%stacktrace{5} (line %line)%newline" />
0赞 iDipa 8/2/2023
@PauloGuimarães不起作用
0赞 rick 8/2/2023
所以可能你的是空的。用LogLogManager.GetLogger("RollingLogFileAppender");
0赞 iDipa 8/2/2023
虽然不起作用

答:

0赞 rick 8/2/2023 #1

log4net.config

<log4net>
  <root>
    <level value="All" />
    <appender-ref ref="YourLog" />
  </root>

  <appender name="YourLog" type="log4net.Appender.RollingFileAppender">
    <file value="logs/yourlog.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="3" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%-5p|%d{ dd.MM.yyyy HH:mm:ss}|%m|%method|%stacktrace{5} (line %line)%newline" />
    </layout>
  </appender>
</log4net>

程序集信息.cs

// some other stuffs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

法典

    private static readonly ILog _log= LogManager.GetLogger("YourLog");

    private static void Main(string[] args)
    {

      try
      {

      }

      catch (Exception e)
      {
         _log.Error("Oh no! Something bad happened", e);
      }
     }

和它的名称无关紧要。仅出于最佳实践,我会使用 log4net,因为稍后您将需要另一个配置。 构建后,这更多是用于项目配置。appender.configApp.configYOUR-PROJECT-NAME.config

评论

0赞 iDipa 8/2/2023
在我的解决方案中,app.config 具有该 log4net 配置。Log4net.config是什么?它在哪里??
0赞 rick 8/2/2023
这就是 Log4net 读取您的配置的方式。它应该在您的项目中。
0赞 iDipa 8/2/2023
发布后,我在发布文件夹中有这么多文件。没有获得要更新的 - EPPlus.dll.deploy - EPPlus.Interfaces.dll.deploy - EPPlus.System.Drawing.dll.deploy - log4net.dll.deploy - Microsoft.IO.RecyclableMemoryStream.dll.deploy - TaskScheduler -- Applocation Manifest - TaskScheduler.exe.config.deploy - TaskScheduler.exe.deploy - TaskScheduler.exe.manifest
0赞 iDipa 8/2/2023
你能给我提供任何链接吗?我可以按照步骤操作并检查我的解决方案?
0赞 rick 8/2/2023
啊,好吧,我不知道你缺乏这个。我会改进我的答案。