【问题标题】:How to configure netty logger factory in order to see the output of LoggingHandler?如何配置 netty 记录器工厂以查看 LoggingHandler 的输出?
【发布时间】:2012-03-24 14:22:24
【问题描述】:

我正在使用带有 logback 的 slf4j 日志记录,并且在我的应用程序开始时我编写了

InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory());

然后我在管道中添加了一个新的 LoggingHandler(InternalLogLevel.DEBUG) 实例。 不幸的是,这仍然没有记录任何内容,我正在调试,调试级别是问题所在,只是跳过了记录本身。

我应该如何设置才能使用这个LoggingHandler

【问题讨论】:

  • 你能详细说明一下 DEBUG 的问题是什么吗?
  • 我看不出为什么在 DEBUG 级别进行日志记录不起作用。自己在 DEBUG 级别进行日志记录是否有效?如果是这样,您能否向我们提供重现问题的具体代码?
  • 你的项目类路径中有slf4j-api.jarsl4j 的一些实现(如logback)吗?您还需要在特定于实现的配置文件中配置日志级别(例如 logback.xml for logback)。
  • 可以试试把上面这行代码放到static {}初始化代码块里吗?

标签: netty slf4j


【解决方案1】:

我做了一个小例子,它确实有效 - 我把它放在gist on github 上。它使用 logback 作为 slf4j 的后端。需要注意的时刻有:

  • InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); 应该在程序的入口点执行。有时这个“入口点”可能很难确定。
  • 正确配置 slf4j 后端。由于 slf4j 只是一个包装器,它根本不处理配置 - 它特定于 log4j、logback 或 java.util.logging(或者可能是一些自定义后端 - 我已经大量使用自定义“java commons logging”配置器,所以真的什么都可以用)
  • 即使没有 LoggingHandler,您也应该看到来自 org.jboss.netty.channel.socket.nio.SelectorUtil 的静态初始化程序的两条调试消息(使用 Netty 版本 3.6.0.Final):

    11:54:00.959 [main] DEBUG o.j.n.c.socket.nio.SelectorUtil - Using select timeout of 500
    11:54:00.962 [main] DEBUG o.j.n.c.socket.nio.SelectorUtil - Epoll-bug workaround enabled = false
    

【讨论】:

  • Netty 但是没有使用我的根记录器,我有以下内容: 10:36:40,447 |-Logger[io.netty.channel.MultithreadEventLoopGroup] 中的警告 - 上下文中不存在附加程序 [默认]对于记录器 [io.netty.channel.MultithreadEventLoopGroup]。
  • Slf4JLoggerFactory 似乎已被弃用
  • 您需要改用InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE);
  • 请注意,添加LoggingHandler 如要点中所示的LoggingHandler(InternalLogLevel.DEBUG) 会将记录器名称设置为LoggingHandler 的FQN,这几乎总是不可取的。要设置记录器名称,请将ClassString 作为第一个参数传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多