ILogger类在.NET Core中找不到。

7
在从 .NET Framework 迁移到 .NET Core 时,生成了这个类,并且我发现 ILogger 中出现了错误,Logtype 找不到。 我试图找到这个类,但没有找到。
namespace Namespace1
{

    public class FileLogger : ILogger
    {
        private static readonly string s_Path = "C:\\log.txt";
        public IObfuscationEngine ObfuscationEngine { get; private set; }

        public FileLogger()
        {
            this.ObfuscationEngine = new DefaultObfuscationEngine();

            Clear();
        }

        private static void Clear()
        {
            try
            {
                if (!File.Exists(s_Path))
                    File.Create(s_Path);
            }
            catch (Exception)
            {
                throw new Exception("Cannot write to file: " + s_Path);
            }

            // empty the file to avoid it growing
            System.IO.File.WriteAllText(s_Path, string.Empty);

            using (StreamWriter sw = new StreamWriter(s_Path, true))
            {
                // write many empty lines to clear the buffers
                for (int i = 0; i < 50; i++)
                {
                    sw.WriteLine("");
                }
            }
        }

        public void MethodInfo(
            LogType traceLevel,
            string traceMessage,
            [CallerMemberName] string memberName = "",
            [CallerFilePath] string sourceFilePath = "",
            [CallerLineNumber] int sourceLineNumber = 0)
        {
            using (StreamWriter sw = new StreamWriter(s_Path, true))
            {
                sw.WriteLine("{0} {1}: {2},{3}({4}) - {5}", 
                    DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    traceLevel,
                    memberName, 
                    Path.GetFileName(sourceFilePath),
                    sourceLineNumber,
                    traceMessage);
            }
        }

        public void ErrorInfo(
            string traceMessage,
            [CallerMemberName] string memberName = "",
            [CallerFilePath] string sourceFilePath = "",
            [CallerLineNumber] int sourceLineNumber = 0)
        {
            using (StreamWriter sw = new StreamWriter(s_Path, true))
            {
                sw.WriteLine("{0} {1}: {2},{3}({4}) - {5}",
                    DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    "ERROR",
                    memberName,
                    Path.GetFileName(sourceFilePath),
                    sourceLineNumber,
                    traceMessage);
            }
        }
    }
}

第一个错误

错误 CS0246 类型或命名空间名称“ILogger”未找到(是否缺少using指令或程序集引用?)

第二个错误

错误 CS0246 类型或命名空间名称“LogType”未找到(是否缺少using指令或程序集引用?)


如果在.NET Framework中项目构建正常,则查看该版本项目中ILogger的定义位置。 - Dai
2
.NET Framework中没有内置ILogger类型,但它出现在SerilogMicrosoft.Extensions.Logging中(尽管两种ILogger类型不兼容)-但是SerilogMEL都适用于.NET Framework.NET Core。我假设您不熟悉将项目更改为使用.NET Core而不是.NET Framework。您是要从头开始重新创建csproj文件吗? - Dai
当我从框架迁移到核心时,此文件是在运行时生成的。在.NET Framework中没有这样的文件。 - user13580431
你可以采用一种方法,即保持使用.NET Framework,但将你的csproj文件从旧式样更改为新式样(packageReference),然后在此基础上进行修改以针对.NET Core(或.NET Standard)。 - Dai
3
在添加了 Microsoft.Extensions.Logging nuget 包之后,不要忘记添加 using Microsoft.Extensions.Logging; - MarkusEgle
显示剩余6条评论
2个回答

6
我遇到了同样的问题,解决方案是在我的项目中添加对以下库的引用: Microsoft.Extensions.Logging.Abstractions

类似错误的另一个可能原因是使用 ILogger 而不是 ILogger<T> - derekbaker783

0

Microsoft.Extensions.Logging.ILogger .net core 必须实现 Log、IsEnabled 和 BeginScope 方法:

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
    {
        throw new NotImplementedException();
    }

public bool IsEnabled(LogLevel logLevel)
    {
        throw new NotImplementedException();
    }

public IDisposable BeginScope<TState>(TState state)
    {
        throw new NotImplementedException();
    }

将日志记录代码移动到这些方法中。


你的意思是我需要创建新的ILogger类并且实现这些方法,还是需要做其他的事情? - user13580431
你的类已经继承了Ilogger接口,因此你应该实现这3个方法。 - Always_a_learner
在插入这些方法ILogger之后,错误得到了解决,但仍然存在日志类型错误。 - user13580431
1
似乎日志类型表示事件是错误还是信息类型。添加此枚举以解决您的问题:public enum LogLevel { INFO, ERROR },它将立即解决错误,但您应该检查旧应用程序中Logtype的值。暂时而言,您可以假设只有两种类型的日志错误和信息。 - Always_a_learner
公共枚举 LogLevel { 信息,错误 } 当我在 FileLogger 中编写这行时,它生成了错误。 - user13580431
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接