相关疑难解决方法(0)

当调用Flush()时,NLog是否应该刷新AsyncTargetWrapper中的所有排队消息?

我想关闭我的应用程序并写入任何挂起的日志消息.所以我LogManager.Flush()在关机过程中打电话.但是,我没有看到所有的消息写出来.相反,如果我等待几秒钟(使用Thread.Sleep()),我会看到消息.

检查后在GitHub上NLOG的代码,我找到AsyncTargetWrapper.FlushAsync()方法仅调度惰性写入器线程上写上下一批次的所有未决消息.它不是同步写日志消息.

这是预期的行为吗?我期望LogManager.Flush()是同步的,即:阻塞直到写入所有待处理的消息(或超过超时).


我在关机时使用的代码:

LogManager.Flush(ex => { }, TimeSpan.FromSeconds(15));
Run Code Online (Sandbox Code Playgroud)

然后是初始化Nlog的代码(这是一个Silverlight应用程序,所以我没有使用任何配置文件).

    public static void InitialiseNLog(LogLevel forLevel)
    {
        var config = new LoggingConfiguration();

        // Add targets.
        // We need an async target wrapping a custom web service call back to the server.
        var serverTarget = new RemoteServiceTarget();
        var asyncWrapper = new AsyncTargetWrapper(serverTarget, 10000, AsyncTargetWrapperOverflowAction.Discard);
        asyncWrapper.TimeToSleepBetweenBatches = (int)TimeSpan.FromSeconds(2).TotalMilliseconds;
        asyncWrapper.BatchSize = 200;

        // Add rules.
        var rule = new LoggingRule("Company.Application.SilverlightApp.*", forLevel, asyncWrapper);
        config.LoggingRules.Add(rule);

        // …
Run Code Online (Sandbox Code Playgroud)

c# silverlight nlog

13
推荐指数
2
解决办法
8188
查看次数

标签 统计

c# ×1

nlog ×1

silverlight ×1