Debugging 如何启用netty的内部日志记录?
我试图在我的项目中启用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
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))
...