1

正如标题所说,Log4Net 不工作。尽管创建了日志文件(作为 CSV),但不会将事件记录到其中。我在 Windows 服务中工作,但是当我将代码移到系统托盘应用程序时,日志记录停止工作。我没有想法,可以使用一些建议......

这是系统托盘应用程序的主程序。我在 Main 方法中配置 Log4Net:

    static class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(HostSwitcher.Program));

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            log4net.Config.XmlConfigurator.Configure();

            if (!SingleInstance.Start()) { return; }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                var applicationContext = new CustomApplicationContext();

                Application.Run(applicationContext);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Program Terminated Unexpectedly",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            SingleInstance.Stop();

        }

    }

这是我的 app.config 文件:

      <?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add
            name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="C:\temp\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>
  <log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="CsvFileAppender"/>
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
      <param name="File" value="C:\temp\emotiv_log.txt"/>
      <param name="AppendToFile" value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
      </layout>
    </appender>
    <appender name="CsvFileAppender" type="log4net.Appender.FileAppender">
      <!--<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />-->

      <file type="log4net.Util.PatternString" value="C:\\logs\\emotiv_log.csv"></file>
      <appendToFile value="true"/>
      <layout type="DataMindLoggerService.CsvPatternLayout, DataMindLoggerService">
        <header value="DateTime,ElapsedTime,Level,UserId,Action,Value&#13;&#10;" />
        <conversionPattern value="%date{M/d/yyyy H:mm:ss.fff}%newfield%property{ElapsedTime}%newfield%level%newfield%property{UserId}%newfield%property{Action}%newfield%property{Value}%endrow" />
      </layout>
    </appender>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

在我的 AssemblyInfo 文件中,我有以下内容:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

而且,在我写入日志文件的每个类的顶部,我有以下内容:

protected static readonly ILog log = LogManager.GetLogger(typeof(SomeNamespace.SomeClass));

此外,我尝试右键单击我的 app.config 文件并使用“如果较新则复制”、“始终复制”和“如果从不复制”进行编译,但上述任何一项似乎都不重要。

有什么建议么。到目前为止,对我来说唯一明显的事情是它在 Windows 服务中工作并且在系统托盘应用程序中停止工作。但是,我没有想法 - 建议?

谢谢。

4

0 回答 0