使用Log4Net进行日志记录在Windows服务中工作,现在在系统托盘应用程序中失败

时间:2012-05-14 21:58:24

标签: c# .net-4.0 log4net system-tray

正如标题所说,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文件并使用“Copy if newer”,“Copy always”和“Copy if never”进行编译,以上都不重要。

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

感谢。

0 个答案:

没有答案