Ramos777 2020-04-16 11:33 采纳率: 0%
浏览 246

c# FileLogTraceListener日志类抛错误当修改时间的时候

我的应用使用的是c# FileLogTraceListener日志类记录日志,采用的是多线程,设置LogFileCreationScheduleOption.Daily用来每天生成新的日志文件。记录日志很正常,当我修改系统时间时(即会产生新的日志文件),就会抛出错误,如图所示。
我觉得是个bug,我查看源码能发现当调用CloseCurrentStream()函数时,m_Stream会被设置成null,造成了错误。FileLogTraceListener类在msdn上说的是 线程安全的,看来并非如此。大家觉得是什么原因?
图片说明

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic.Logging;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("start");
Tracelog.StartTrace();

        for (int i = 0; i < 10; i++)
        {
            Thread backthread = new Thread(new ThreadStart(Worker));
            backthread.Start();
        }

    }

    public static void Worker()
    {
        while (true)
        {
            //Console.WriteLine("start");
            Tracelog.Trace(Tracelog.INFO, "test");
            Thread.Sleep(10);
        }
    }
}

public class Tracelog
{
    public static int INFO = 0;
    public static int ERROR = 1;

    public static FileLogTraceListener myListener;

    //private static readonly object Lock = new object();

    public static void StartTrace()
    {
        try
        {
            //lock (Lock)
            {
                myListener = new FileLogTraceListener("myListener");
                myListener.LogFileCreationSchedule = LogFileCreationScheduleOption.Daily;
                myListener.CustomLocation = "log";
                myListener.BaseFileName = "log";
                myListener.MaxFileSize = 10 * 1024 * 1024;
                myListener.WriteLine("Trace start");
                myListener.Flush();
            }

        }
        catch (Exception e)
        {
            Console.WriteLine("StartTrace error" + e.ToString());
        }
    }

    public static void Trace(int type, string message)
    {
        try
        {
            //lock (Lock)
            {
                myListener.WriteLine(message);
                myListener.Flush();
            }


        }
        catch (Exception e)
        {
            Console.WriteLine("Trace error message:" + e.ToString());
        }
    }
}

}


  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-16 11:45
    关注

    错误信息不完整,特别是第一行,有异常的类型,比如权限不足、无效的操作,等等,具体你看下什么原因。

    评论

报告相同问题?

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分 合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备