Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用扩展方法将消息写入日志文件或控制台_C#_Logging_Console_Console.writeline - Fatal编程技术网

C# 如何使用扩展方法将消息写入日志文件或控制台

C# 如何使用扩展方法将消息写入日志文件或控制台,c#,logging,console,console.writeline,C#,Logging,Console,Console.writeline,这是我的密码 class Program { static void Main(string[] args) { (from d in new DirectoryInfo("E:\\") .GetDirectories() select d.Name) .WriteToConsole(Logger.WriteToLog , true); // .WriteToConsole(Console.Write

这是我的密码

class Program
{
    static void Main(string[] args)
    {
        (from d in new DirectoryInfo("E:\\")
    .GetDirectories() select d.Name)
             .WriteToConsole(Logger.WriteToLog , true);
            //    .WriteToConsole(Console.WriteLine);
    }
}

public static class Logger
{
    public static void WriteToLog(dynamic data)
    {
        string filePath = string.Format("{0}\\log.txt", Environment.CurrentDirectory);
        var stream = File.Create(filePath);
        stream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetByteCount(data));
        stream.Flush();
        stream.Close();
    }
}

public static class WriteExtensions
{
    public static void WriteToConsole<T1>(this IEnumerable<T1> data , Action<T1> action, bool carelist = false)
    {
        if (carelist)
        {
            // all i want is to invoke action by sending data rather than
    // one by one
            return;
        }
        foreach (var item in data)
        {
            action.Invoke(item);
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
(来自新目录信息中的d(“E:\\”)
.getDirectory()选择d.Name)
.WriteToConsole(Logger.WriteToLog,true);
//.writeConsole(Console.WriteLine);
}
}
公共静态类记录器
{
公共静态无效写入日志(动态数据)
{
string filePath=string.Format(“{0}\\log.txt”,Environment.CurrentDirectory);
var stream=File.Create(文件路径);
stream.Write(Encoding.UTF8.GetBytes(数据),0,Encoding.UTF8.GetByteCount(数据));
stream.Flush();
stream.Close();
}
}
公共静态类WriteExtensions
{
公共静态void WriteToConsole(此IEnumerable数据,Action-Action,bool-carelist=false)
{
if(护理列表)
{
//我只想通过发送数据来调用操作,而不是
//一个接一个
返回;
}
foreach(数据中的var项)
{
行动.调用(项目);
}
}
}

问题是我们可以一行一行地写入控制台..但对于写入文件,我想一次将所有内容放入。。任何帮助。。谢谢

您的日志记录要求非常复杂。因此,我建议已经存在。它们具有您需要的功能,但可能还没有意识到您需要它们。支持登录控制台和日志文件,可以在配置文件中启用,而不是直接在代码中启用。还可以同时登录到多个目标。还将根据日志的严重性进行筛选。当日期更改或文件增长超过限制时,也可以滚动到另一个文件。

您有一个函数
writeConsole
,它不会写入控制台。这有点令人困惑。另外,是否有理由使用操作和扩展方法?为什么不做一些正常的方式呢?第八行评论。。。取消注释将写入控制台。您希望替换一行代码。我的问题是为什么?为什么只需要替换一行代码?为什么不替换几行呢?ActionHandler将处理在不同区域写入日志的问题…比如数据库、文件、控制台等。。。。必须写入的位置的选项将来自db。。