Debugging 如何启用netty的内部日志记录?

Debugging 如何启用netty的内部日志记录?,debugging,logging,netty,Debugging,Logging,Netty,我试图在我的项目中启用netty日志记录。互联网上有很多例子,但最终对我来说并不适用 InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE); 及 我应该做这个把戏 public final class EchoServer { static final int PORT = Integer.parseInt(System.getProperty("port", "8007")); public static vo

我试图在我的项目中启用netty日志记录。互联网上有很多例子,但最终对我来说并不适用

InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE);

我应该做这个把戏

public final class EchoServer {
static final int PORT = Integer.parseInt(System.getProperty("port", "8007"));

public static void main(String[] args) throws Exception {
    InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE);
    // Configure SSL.
    final SslContext sslCtx;
    SelfSignedCertificate ssc = new SelfSignedCertificate();
    sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();

    // Configure the server.
    EventLoopGroup bossGroup = new NioEventLoopGroup(1);
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class)
            .option(ChannelOption.SO_BACKLOG, 100)
            .childHandler(new ChannelInitializer < SocketChannel > () {
                @Override
                public void initChannel(SocketChannel ch)
                throws Exception {
                    ChannelPipeline p = ch.pipeline();
                    if (sslCtx != null) {
                        p.addLast(sslCtx.newHandler(ch.alloc()));
                    }
                    p.addLast(new ObjectDecoder(ClassResolvers.weakCachingConcurrentResolver(getClass().getClassLoader())));
                    p.addLast(new ObjectEncoder());
                    p.addLast("logger", new LoggingHandler(LogLevel.DEBUG));
                    p.addLast(new EchoServerHandler());
                }
            });

        // Start the server.
        ChannelFuture f = b.bind(PORT).sync();

        System.out.println("EchoServer listening at " + EchoServer.PORT);

        // Wait until the server socket is closed.
        f.channel().closeFuture().sync();
    } finally {
        // Shut down all event loops to terminate all threads.
        bossGroup.shutdownGracefully();
        workerGroup.shutdownGracefully();
    }
  }
}
公共最终类EchoServer{
静态final int PORT=Integer.parseInt(System.getProperty(“PORT”,“8007”));
公共静态void main(字符串[]args)引发异常{
setDefaultFactory(JdkLoggerFactory.INSTANCE);
//配置SSL。
最终SslContext sslCtx;
SelfSignedCertificate ssc=新的SelfSignedCertificate();
sslCtx=SslContextBuilder.forServer(ssc.certificate(),ssc.privateKey()).build();
//配置服务器。
EventLoopGroup bossGroup=新的NioEventLoopGroup(1);
EventLoopGroup workerGroup=新的NioEventLoopGroup();
试一试{
ServerBootstrap b=新的ServerBootstrap();
b、 组(bossGroup、workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,100)
.childHandler(新的通道初始值设定项(){
@凌驾
公共频道(SocketChannel ch)
抛出异常{
ChannelPipeline p=通道管道();
如果(sslCtx!=null){
p、 addLast(sslCtx.newHandler(ch.alloc());
}
p、 addLast(新的ObjectDecoder(ClassResolver.WeakCacheConCurrentResolver(getClass().getClassLoader()));
p、 addLast(新的ObjectEncoder());
p、 addLast(“logger”,新的LoggingHandler(LogLevel.DEBUG));
p、 addLast(新的EchoServerHandler());
}
});
//启动服务器。
ChannelFuture f=b.bind(PORT.sync();
System.out.println(“在“+EchoServer.PORT”上侦听的EchoServer);
//等待服务器套接字关闭。
f、 通道().closeFuture().sync();
}最后{
//关闭所有事件循环以终止所有线程。
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}

有人知道如何让它工作吗?

为我解决了这个问题。如果使用JdkLoggerFactory,请记住使用jre\lib\中的logging.properties。JUL的默认值为:

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO

我们生成了自己的属性文件,以便动态设置级别。

您可以使用
LoggingHandler
获取netty的日志:

b.group(bossGroup, workerGroup)
 .channel(NioServerSocketChannel.class)
 .handler(new LoggingHandler(LogLevel.INFO))
 ...
b.group(bossGroup, workerGroup)
 .channel(NioServerSocketChannel.class)
 .handler(new LoggingHandler(LogLevel.INFO))
 ...