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

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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误