iText7 - 如何设置LoggerFactory?

时间:2017-08-26 02:59:15

标签: .net vb.net itext

我今天刚开始使用iText,所以我开始运行教程#1中的示例。不幸的是我收到了以下错误消息:

Exception thrown: 'System.NullReferenceException' in itext.io.dll
iText.IO.Log.LoggerFactory: No logger factory was bound. Defaulting to no-operation logger implementation.
iText.IO.Log.LoggerFactory: In order to bind a logger factory use     iText.IO.Log.LoggerFactory.BindFactory().

显然我还没有设置一个名为LoggerFactory的东西。我该怎么做?

3 个答案:

答案 0 :(得分:1)

在iText的java版本中,log4j用于处理错误消息记录 在.net版本中使用log4net 通常,如果使用NuGet安装iText,则会自动处理依赖性解析。

答案 1 :(得分:1)

我们遇到了与C#iText7项目相似的情况,其中

iText.IO.Log.LoggerFactory: No logger factory was bound. Defaulting to no-operation logger implementation.
iText.IO.Log.LoggerFactory: In order to bind a logger factory use     iText.IO.Log.LoggerFactory.BindFactory().
每当我们尝试访问任何iText类时,每次尝试运行该过程时都会记录

....

我们通过在程序开头添加以下代码来解决这个问题:

iText.IO.Log.NoOpLoggerFactory iTextLoggerFactory = new iText.IO.Log.NoOpLoggerFactory();
iText.IO.Log.LoggerFactory.BindFactory(iTextLoggerFactory);

希望这有帮助!

答案 2 :(得分:0)

对于那些正在寻找示例实现的人来说,这是我们为控制台日志记录所做的那样:

public class ConsoleLoggerFactory : iText.IO.Log.ILoggerFactory
{
    private readonly iText.IO.Log.ILogger _logger = new ConsoleLogger();

    public iText.IO.Log.ILogger GetLogger( Type type )
    {
        return _logger;
    }

    public iText.IO.Log.ILogger GetLogger( string name )
    {
        return _logger;
    }
}

这是上述工厂使用的记录器:

public sealed class ConsoleLogger : iText.IO.Log.ILogger
{
    public void Warn( string message )
    {
        Console.WriteLine( message );
    }

    public bool IsWarnEnabled()
    {
        return true;
    }

    public void Trace( string message )
    {
        Console.WriteLine( message );
    }

    public bool IsTraceEnabled()
    {
        return true;
    }

    public void Debug( string message )
    {
        Console.WriteLine( message );
    }

    public bool IsDebugEnabled()
    {
        return true;
    }

    public void Info( string message )
    {
        Console.WriteLine( message );
    }

    public bool IsInfoEnabled()
    {
        return true;
    }

    public void Error( string message, Exception exception )
    {
        Console.WriteLine( message );
        Console.WriteLine( exception );
    }

    public bool IsErrorEnabled()
    {
        return true;
    }

    public void Error( string message )
    {
        Console.WriteLine( message );
    }
}

然后,您可以在启动时将其与以下代码绑定:

var iTextLoggerFactory = new ConsoleLoggerFactory();
iText.IO.Log.LoggerFactory.BindFactory(iTextLoggerFactory);