log4net没有将任何消息写入日志文件或控制台

因此,我有一个控制台应用程序。


使用log4net记录消息。


下面是我的log4net.config文件。


<?xml version="1.0"?>

<log4net>

    <appender name="FileAppender" type="log4net.Appender.FileAppender">

        <file value="log.txt" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">

            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />

        </layout>

    </appender>

    <appender name="ConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">

        <mapping>

            <level value="ERROR" />

            <backColor value="Red, HighIntensity" />

        </mapping>

        <mapping>

            <level value="WARN" />

            <foreColor value="White" />

            <backColor value="Yellow" />

        </mapping>

        <mapping>

            <level value="INFO" />

            <foreColor value="White" />

        </mapping>

        <mapping>

            <level value="DEBUG" />

            <backColor value="Green" />

        </mapping>

        <layout type="log4net.Layout.PatternLayout">

            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />

        </layout>

    </appender>

    <root>

        <level value="ALL" />

        <appender-ref ref="ConsoleAppender" />

        <appender-ref ref="FileAppender" />

    </root>

</log4net>

在我的控制台应用程序中,我要运行此类


public class SchedulerService

{

    private static readonly ILog _log = LogManager.GetLogger(typeof(SchedulerService));

    private readonly SchedulerRegistry _registry;


    public SchedulerService(SchedulerRegistry schedulerRegistry)

    {

        _registry = schedulerRegistry;

    }


    public void Start()

    {

        JobManager.Initialize(_registry);

        JobManager.JobException += JobManager_JobException;

        _log.Info("SchedulerService is started");

    }


结果是创建了log.txt文件,但其大小为零,为空,没有任何内容记录到该文件中,也没有任何内容记录到控制台中。


我究竟做错了什么?


慕的地10843
浏览 346回答 3
3回答

江户川乱折腾

你log4net.config是对的。确保:该Copy to Output Directory&nbsp;物业的的log4net.config文件设置为Copy Always。这很重要,因为在构建和运行应用程序时,需要将配置文件复制到bin文件夹中。通过右键单击配置文件并选择来执行此操作Properties。然后将Copy to Output Directory属性的值设置为Copy Always。您告诉log4net加载您的配置。实现此目的的一种方法是在AssemblyInfo文件底部添加以下行:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

月关宝盒

试试这个方法。您必须将其命名为ColoredConsoleAppender而不是ConsoleAppender。希望它能正常工作。<appender name="FileAppender" type="log4net.Appender.FileAppender">&nbsp; &nbsp; <file value="log.txt" />&nbsp; &nbsp; <appendToFile value="true" />&nbsp; &nbsp; <layout type="log4net.Layout.PatternLayout">&nbsp; &nbsp; &nbsp; &nbsp; <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />&nbsp; &nbsp; </layout></appender><appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">&nbsp; &nbsp; <mapping>&nbsp; &nbsp; &nbsp; &nbsp; <level value="ERROR"/>&nbsp; &nbsp; &nbsp; &nbsp; <foreColor value="Red"/>&nbsp; &nbsp; </mapping>&nbsp; &nbsp; <mapping>&nbsp; &nbsp; &nbsp; &nbsp; <level value="INFO"/>&nbsp; &nbsp; &nbsp; &nbsp; <foreColor value="White"/>&nbsp; &nbsp; </mapping>&nbsp; &nbsp; <mapping>&nbsp; &nbsp; &nbsp; &nbsp; <level value="DEBUG"/>&nbsp; &nbsp; &nbsp; &nbsp; <foreColor value="Green"/>&nbsp; &nbsp; </mapping>&nbsp; &nbsp; <layout type="log4net.Layout.PatternLayout">&nbsp; &nbsp; &nbsp; &nbsp; <conversionPattern value="%message%newline"/>&nbsp; &nbsp; </layout></appender><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">&nbsp; &nbsp; <layout type="log4net.Layout.PatternLayout">&nbsp; &nbsp; &nbsp; &nbsp; <conversionPattern value="%date %-5level %logger - %message%newline"/>&nbsp; &nbsp; </layout></appender><root>&nbsp; &nbsp; <priority value="ALL"/>&nbsp; &nbsp; <appender-ref ref="FileAppender"/>&nbsp; &nbsp; <appender-ref ref="ColoredConsoleAppender"/></root>

POPMUISE

看起来像是我之前从未注意到的VS 2017的新功能。以前,只有通过“添加引用”或“ NuGet软件包管理器”手动添加了相应的组件时,才能解析名称空间。在VS 2017中,当您尝试解析名称空间时,它实际上为您安装了这些软件包。就像我这样,这可能很方便,但也很令人沮丧。不知道为什么,但是VS决定包括此Common.Logging和Common.Logging.Core软件包,而不是我的解决方案中已经包含的log4net。可能我盲目地信任,并且没有注意到这些软件包与我想使用的库无关。奇怪的是,代码编译就很好了:)因此,这就是代码无法正常工作的原因。意识到。
打开App,查看更多内容
随时随地看视频慕课网APP