首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交替日志文件

交替日志文件
EN

Stack Overflow用户
提问于 2014-04-27 14:33:53
回答 2查看 83关注 0票数 2

我正在尝试在c#中编写一个Logfile类。我想这样做:我写我的日志在第一个日志文件,如果它是超过一定的大小,它将写入第二个日志文件。如果第二个日志文件已满,则删除第一个日志文件并再次写入该日志文件,以此类推。

到目前为止,我有这样的想法:

代码语言:javascript
复制
public class LogfileBuilder
{
    StreamWriter sW;
    const string file1 = "EventLogging1.txt";
    const string file2 = "EventLogging2.txt";
    FileInfo fInfo;
    public void writeLine(string write)
    {
        string usingFile;
        fInfo = new FileInfo(file1);
        long s1 = fInfo.Length;
        if (s1 > 300)
        {
            fInfo = new FileInfo(file2);
            long s2 = fInfo.Length;
            if (s2 > 300)
            {
                File.Create(file1).Close();
                usingFile = file1;
            }
            else
            {
                usingFile = file2;
            }
        }
        else usingFile = file1;


        using (sW = File.AppendText(usingFile))
        {
            sW.WriteLine(write);
        }
    }
}

有人能帮我完成吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-27 17:02:28

这花了我一些时间,但是(最后)经过一些修改,您的代码现在可以按要求工作了。

代码语言:javascript
复制
public class LogfileBuilder
{
    StreamWriter sW;
    const string file1 = "EventLogging1.txt";
    const string file2 = "EventLogging2.txt";
    FileInfo fInfo;

    // moved this variable out of function to track which file was used during last writing
    string usingFile = null;                  
    public void writeLine(string write)
    {
        fInfo = new FileInfo(file1);
        long s1 = fInfo.Length;
        if (s1 > 300)
        {
            // added below check to delete and re-create the file#1 (of zero bytes)
            if (usingFile == file1)
                File.Create(file2).Close();

            fInfo = new FileInfo(file2);
            long s2 = fInfo.Length;
            if (s2 > 300)
            {
                File.Create(file1).Close();
                usingFile = file1;
            }
            else
            {
                usingFile = file2;
            }
        }
        else 
            usingFile = file1;

        using (sW = File.AppendText(usingFile))
        {
            sW.WriteLine(write);
        }
    }
}

顺便说一句,您应该看看log4net (也像martin_costello所建议的那样),它有很多特性和灵活性。参考:Apache log4net特性列表

票数 0
EN

Stack Overflow用户

发布于 2014-04-27 15:53:03

我想应该是这样的:

代码语言:javascript
复制
public class LogfileBuilder
{       
    private const string DEFAULT_PATH_1 = "EventLogging1.txt";
    private const string DEFAULT_PATH_2 = "EventLogging2.txt";

    private readonly string _filePath1;
    private readonly string _filePath2;
    private readonly long _delimiterSize;

    public LogfileBuilder(long delimiterSize = 300)
    {
        _filePath1 = DEFAULT_PATH_1;
        _filePath2 = DEFAULT_PATH_2;
        _delimiterSize = delimiterSize;
    }

    public LogfileBuilder(string filePath1, string filePath2, long delimiterSize = 300)
    {
        _filePath1 = filePath1;
        _filePath2 = filePath2;
        _delimiterSize = delimiterSize;
    }

    public void Log(string content)
    {           
        //No file1
        if(File.Exists(_filePath1) == false)
        {
            //No file1, file2
            if(File.Exists(_filePath2) == false)
            {
                //Creates/overrides file1
                File.WriteAllText(_filePath1, content);
            }
            //file2, no file1
            else
            {
                var fileInfo = new FileInfo(_filePath2);
                //file2 > delimiter
                if(fileInfo.Length > _delimiterSize)
                {
                    File.Delete(_filePath2);
                    //Creates/overrides file1
                    File.WriteAllText(_filePath1, content);
                }
                //file2 < delimiter
                else
                {
                    File.AppendAllText(_filePath2, content);
                }
            }               
        }
        //file1
        else
        {
            var fileInfo = new FileInfo(_filePath1);
            //file1 > delimiter
            if(fileInfo.Length > _delimiterSize)
            {
                File.Delete(_filePath1);
                //Creates/override filepath2
                File.WriteAllText(_filePath2, content);
            }
            //file1 < delimiter
            else
            {
                File.AppendAllText(_filePath1, content);    
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23324672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档