Netty LoggingHandler в текстовый файл - PullRequest
0 голосов
/ 23 октября 2018

Итак, если этот маленький сервер запущен и запущен, и в консоли я часто вижу полную информацию о сети, однако я не уверен, как записать LoggingHandler в какой-нибудь текстовый файл.Кто-нибудь пробовал это?Или вообще возможно?

public void run() {
        System.out.println("UDP Server is starting.");
        try{
            Bootstrap bootstrap = new Bootstrap();
            bootstrap.group(nioEventLoopGroup)
                    .channel(NioDatagramChannel.class)
                    .handler(new ChannelInitializer<Channel>() {
                        @Override
                        protected void initChannel(Channel channel) {
                            channel.pipeline().addLast("UDP LOGS",new LoggingHandler(LogLevel.INFO));
                            channel.pipeline().addLast(new StringEncoder(), new StringDecoder());
                            channel.pipeline().addLast(
                                    new UdpServerHandler(viewModel));
                        }
                    });
            channelFuture = bootstrap.bind(port).sync();

        }
        catch (InterruptedException e) {
            System.err.println("UDP listener was interrupted and shutted down");
            e.getCause();
        }
    }

1 Ответ

0 голосов
/ 23 октября 2018

Обработчик ведения журнала использует встроенную среду ведения журнала для регистрации своих сообщений, поэтому вы также можете изменить его назначение ведения журнала, используя такие вещи:

    Logger log = Logger.getLogger(LoggingHandler.class.getName());
    log.setUseParentHandlers(false);
    log.addHandler(new FileHandler());

В то время как FileHandler являетсяБыстрое решение для регистрации файлов, на самом деле это довольно раздражает в использовании, учитывая тот факт, что он принимает свои свойства ведения журнала (например, целевой файл) из системных свойств, а не через конструктор.

Так что это означает, что у вас естьнаписать свой собственный обработчик для записи вещей так, как вы хотите их записать:

    Writer writer = Files.newBufferedWriter(FileSystems.getDefault().getPath("test.log"));
    log.addHandler(new Handler() {

        @Override
        public void close() throws SecurityException {
            synchronized (this) {
                try {
                    writer.close();
                } catch (IOException ex) {
                    // TODO: better error handling
                    ex.printStackTrace();
                }
            }
        }

        @Override
        public void flush() {
            synchronized (this) {
                try {
                    writer.flush();
                } catch (IOException ex) {
                    // TODO: better error handling
                    ex.printStackTrace();
                }
            }
        }

        @Override
        public void publish(LogRecord record) {
            // TODO: Format the logrecord better
            String formatted = record.getLevel() + ": " + record.getMessage() + "\n";
            synchronized (this) {
                try {
                    writer.write(formatted);
                } catch (IOException ex) {
                    // TODO: better error handling
                    ex.printStackTrace();
                }
            }
        }

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...