Filehandler java не создает файл

Обновлено: 04.07.2024

Я пытаюсь создать свой собственный класс ведения журнала с помощью java.util.logging. Часть этого класса позволяет вызывающему объекту указать файл журнала с помощью класса FileHandler. Однако я не могу заставить один из моих методов создать новый объект FileHandler. Вот в основном то, что у меня есть:

импорт java.util.logging.Level; импорт java.util.logging.Logger; импорт java.util.logging.FileHandler;

Когда я запускаю это, я получаю: "java: unreported exception java.io.IOException".

Я также получаю эту же ошибку, если избавляюсь от метода setLogFilename и просто пытаюсь создать новый объект FileHandler, когда объявляю атрибут logFileHdl следующим образом:

импорт java.util.logging.Level; импорт java.util.logging.Logger; импорт java.util.logging.FileHandler;

Я не знаю почему.

1 ответ

Я обнаружил странное явление в моей программе java во время выполнения, просто посмотрите на мой код: System.out.println( date + new Date(1359931355141L).toGMTString() ); результатом этого заявления было дата 3 февраля 2013 года 22:42:35 GMT, и System.out.println( date + new.

Итак, вопрос был в том, что я новичок Java. По-видимому, из-за того, что конструктор FileHandler может выдать IOException, я вынужден обрабатывать исключение (или объявлять, что мой класс может выдать это исключение.) Я и не подозревал, что это так. Поэтому, если я добавлю "try/catch" для IOException, ошибка исчезнет.

Похожие вопросы:

Я хочу напечатать дату и время в файле а не на экране это мой код: String fileName = NameEnter.getText(); Logger logger = Logger.getLogger(puzzleNumberGame.securityScreen); FileHandler fh = new.

Я изучаю наследование и работаю с этой простой программой, которая имеет суперкласс и подкласс, как показано ниже. Мой вопрос не относится конкретно к этой программе; однако именно здесь я впервые.

У меня есть запрос относительно создания экземпляра нового объекта в java из класса, переданного в качестве параметра в методе, например: void myMethod(Class aReceived)< object = new aReceived //.

Я обнаружил странное явление в моей программе java во время выполнения, просто посмотрите на мой код: System.out.println( date + new Date(1359931355141L).toGMTString() ); результатом этого.

Я начинаю путаться в том, когда должен запускаться блок инициализации экземпляра. Согласно Книге Кэти Сьерра: Блоки инициализации экземпляра запускаются каждый раз при создании экземпляра класса.

Я пытаюсь выполнить создание экземпляра через Node.js AWS SDK и использую для этого следующий код: OpsWorks.createInstanceAsync(< InstanceType: config.instanceType, LayerIds: [config.layerId].

Я создаю регистратор Java и пытаюсь записать его в консоль и в файл. Консольная часть работает нормально, но файл никогда не создается. Я хочу, чтобы этот файл существовал в моей целевой папке. Я.

Не могли бы вы объяснить, почему явное создание экземпляра шаблона здесь не работает? template <typename T> bool IsEqual(T v1, T v2) < return v1 == v2; >template bool.

Почему последняя строка в следующем коде выводит there ? Похоже, что создание нового экземпляра того же класса перезаписывает старый экземпляр. Есть ли способ предотвратить такое поведение, чтобы.

Однако в настоящее время я работаю над веб-приложением (в NetBeans IDE). В веб-приложении, к сожалению, невозможно получить вывод журнала на консоль.

Однако, что бы я ни пытался, не работал.

Например, я пробовал это:

. и многое другое, но НИЧЕГО НЕ РАБОТАЕТ!

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

уже пробовал log4j . тоже не работал . вы также можете применить log4j к одному приложению . вам не нужно настраивать его для всего кота Обновите свой вопрос, указав фактический файл свойств, расположение файла свойств относительно корня проекта, версии Tomcat и Netbeans. Вы запускали свой код в отладчике, чтобы убедиться, что logger.log был вызван?

4 ответа

Попробуйте это. Он создаст текстовый файл в папке проекта.

Пожалуйста, не забудьте сделать обновление, чтобы увидеть файл.

Я хочу иметь возможность делать в своем приложении Java Netbeans то же самое, что и в обычном приложении: писать инструкции печати на консоль или какой-либо файл для целей отладки.

Я тестировал это с помощью Netbeans, создавая новый веб-проект под управлением Tomcat 8 с новым сервлетом. Я модифицировал сервлет, чтобы включить:

И результат выводится на консоль Tomcat по умолчанию без изменений в Tomcat, никаких изменений в проекте и никаких параметров logger.properties в проекте.

В веб-приложении, к сожалению, невозможно получить вывод журнала на консоль.

При запуске Tomcat в unixes вывод консоли обычно перенаправляется в файл Catalina.out. При работе в качестве службы в Windows вывод консоли также вызывается и перенаправляется, но имена файлов различаются.

По умолчанию местоположения находятся в доме Tomcat или домена под папкой logs . Конфигурация по умолчанию должна уже записывать вывод журнала в файл из-за установленного обработчика консоли и переустановки System.err в файл. Это может быть не то местоположение, которое вы хотите.

Даже если System.err/out переназначены, вы можете записать на консоль JVM, создав собственный пользовательский обработчик, который записывается в java.io.FileDescriptor.

По умолчанию Netbeans будет отображать и отображать этот вывод консоли. То же самое верно, если вы просто пишете код, который печатает на console.

Пример logging.properties для веб-приложения сервлетов-примеров, которое должно быть помещено в WEB-INF/классы внутри веб-приложения:

Помните, что для Tomcat вы должны объявить обработчики, которые могут использоваться, в отличие от стандартного LogManager.

Если вы не можете заставить файлы конфигурации журнала работать, добавьте в свой проект прослушиватель контекста сервлета и вручную установите обработчик файла.

В ходе моей работы в компании DataArt я, в числе прочего, занимаюсь менторской деятельностью. В частности это включает в себя проверку учебных заданий сделанных практикантами. В последнее время в заданиях наметилась тенденция «странного» использования логеров. Мы с коллегами решили включить в текст задания ссылку на статью с описанием java logging best practices, но оказалось, что такой статьи в которой бы просто и без лишних деталей на практике объяснялось бы как надо писать в лог на Java, вот так вот с ходу не находится.

Данная статья не содержит каких-то откровений, в ней не рассматриваются тонкости какого либо из многочисленных java logging frameworks. Здесь рассказываю как записать в лог так, чтобы это не вызвало удивления у Ваших коллег, основная цель написания включить ее в список обязательного чтения для практикантов. Если все еще интересно, читайте дальше

  • Весь код примеров использует java.util.logging framework. Вопрос «Какой из фреймворков логирования ниболее кошерен» я оставлю за кадром. Скажу только что до java.util.logging проще всего дотянуться ибо он уже идет вместе с JRE и на самом деле рассказанное в данной статье с минимальными косметическими правками верно для подавляющего большинства систем логирования.
  • В целом рецепты приведенные в данной статье не являются единственно верными, есть моменты о которых можно поспорить, но в целом эти рецепты используются многие годы, многими разработчиками, во многих проектах и они достаточно хороши чтобы им следовать если у Вас нет каких-то совсем уже серьезных возражений.
  • В статье не рассматриваются такие «продвинутые» топики как:
    • Конфигурирование уровней для отдельных логеров
    • Форматирования логов
    • Асинхронное логирование
    • Создание собственных уровней логирования в Log4J
    • Контекстное логирование
    • И многое другое
    Пример №1
    Хорошо
    1. Логер это статическое поле класса инициализируемое при загрузке класса, имеет простое, короткое имя, важно чтобы во всех Ваших классах переменная логера называлась одинаково (это диктуется общим правилом, одинаковые вещи в программе должны делаться одинаковым образом).
    2. В качестве имени логера я использую имя класса, на самом деле это не единственный способ, можно пытаться организовать какую-то свою иерархию логирования (например transport layer/app layer для подсистем имеющих дело с обменом данными), но как показывает практика выдумывать и главное потом неукоснительно следовать такой иерархии крайне сложно, а вариант с именами логеров совпадающими с именами классов весьма хорош и используется в 99% проектов
    3. Здесь для записи в лог я использую короткий метод .info, а не более общий метод .log, так много лаконичнее
    4. Имя логера берется как SomeClass.class.getName(), а не как «com.dataart.demo.java.logging.SomeClass», оба способа по идее одинаковы, но первый защищает Вас от сюрпризов при рефакторинге имени/пакета класса
    Плохо


    По сути тоже самое но букв больше и читается не так легко.

    Замечание между примерами
    Пример №2
    Хорошо
    Плохо


    Если логировать только ex.toString(), то потом Вы не сможете понять в какой строке изначально сработало исключение.

    Пример №3

    Какие тут есть варианты

    По умолчанию: Файл logging.properties для уровня INFO, вывод в консоль

    создаст вот такие файлы (последняя колонка — размер в байтах)

    Мы указали максимальный размер 50 байтов, в реальной жизни надо скорее указывать не меньше мегабайта, например вот так (я знаю, что 1000000 это чуть меньше мегабайта, но кому охота по памяти писать 1048576, если суть дела это фактически не меняет)

    copy & paste конфиг для реальной жизни, его вполне хватает для большинства service, console и desktop приложений.

    Последняя часть магии
    1. Из командной строки запуска приложения
    2. В первых строчках кода Вашего приложения

    Первый чуть более правильный ибо он декларативный и работает сразу, до того как начал работать код Вашего приложения.

    Вот так

    java Djava.util.logging.config.file=logging.properties com.dataart.application.ClassName

    Но к сожалению менять строку запуска не всегда можно или не всегда удобно. Второй способ тоже неплохо работает.

    Файловые обработчики - это механизмы, обеспечивающие абстрагирование примитивных файловых операций.

    Я использую библиотеку java.util.logging для ведения журнала. Мой код выглядит следующим образом: package com.test.vesrionControlSystem.services; import java.io.IOException; import java.util.Date; import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Log.

    Я попробовал API для отдыха без каких-либо View с mongodb. Мое приложение работает нормально со встроенным сервером загрузки Spring без ошибок. В автономном приложении tomcat работает без ошибок, но не может получить доступ к отображенному URL @RestController. Это показывает 404 страница не найдена.

    Следующий код вызывает неожиданное поведение с logging.handlers.TimedRotatingFileHandler: logger1 = logging.getLogger("One") logger2 = logging.getLogger("Two") handler1 = TimedRotatingFileHandler( "service.log", when="M", backupCount=2, utc=True ) handler2 = TimedRotatingFileHandler.

    Мне нужно создать один файл журнала для каждого приложения, установленного и запущенного на сервере приложений websphere 9. Я использую JUL для создания файла журнала. Мое решение заключалось в создании особого класса, наследуемого от FileHandler, и установки свойств журналов с помощью файла конфиг.

    У меня есть два файла: File1 и File2. Я хочу добавить File2 в конец File1. func writeToFile(content: String, fileName: String) < let contentToAppend = content+"\n" let filePath = NSHomeDirectory() + "/Documents/" + fileName //Check if file exists if let fileHandle = FileHandle(for.

    Я использую средство ведения журнала в исходном коде Python и хочу создавать журналы в определенном месте, но модуль ведения журнала Python создает файлы журнала в месте по умолчанию, то есть откуда он выполняется. Есть ли способ изменить это местоположение по умолчанию? Ниже моя конфигурация im.

    Я вызываю функцию ниже, чтобы получить содержимое файла .txt, и несколько раз мне это удается, но иногда, когда я пытаюсь получить, он собирается поймать блок и выдает следующую ошибку . пожалуйста, помогите мне // Используется для обмена func getLogData(file: String) -> String? < let shareLo.

    У меня есть три класса, и я хочу добавить журналы в общий файл. Таким образом, конструктор каждого класса имеет fh = new FileHandler("log.txt", true); LOGGER_A.addHandler(fh); SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter); > .

    Это хорошая идея использовать один и тот же обработчик файлов в нескольких регистраторах? Я использую среду ведения журналов Java и хочу, чтобы разные регистраторы записывали в один и тот же файл журнала, но я не знаю, является ли приведенный ниже пример кода хорошим стилем программирования. import .

    У меня есть проект maven, в котором я написал фильтр java.util.logging, как показано ниже. package com.xyz.filters; import java.util.logging.Filter; import java.util.logging.LogRecord; class CustomFilter implements Filter < public boolean isLoggable(LogRecord record) < return record.getLogge.

    Я не могу заставить работать мой регистратор. В моем коде есть следующие строки: private static final Logger log = Logger.getLogger(ServerThread.class.getName()); log.setUseParentHandlers(false); FileHandler fh = new FileHandler("ex.txt", true); SimpleFormatter sf = new SimpleFormatter(); fh.setForm.

    Питон новичок. Теперь я застрял на некоторое время. Когда я пытаюсь записывать логи в файл, используя конфигурацию ini, в этом файле ничего не записывается. Я пытался отладить проблему, но не мог получить никакой подсказки. Запись журналов без использования файла ini работает отлично. Ниже приведен .

    У меня есть небольшая процедура, которая устанавливает такой таймер: timer.schedule(new myRoutine(), 1000, 60000); В методе run() объекта myRoutine открывается logger и к нему присоединяется FileHandler: FileHandler fh = new FileHandler("app.log"),true); logger.addHandler(fh); Поскольку для прилож.

    У меня есть пользователь, который сообщает, что файлы отображаются в его браузере как необработанные данные. Он использует Internet Explorer. Файлы обслуживаются через файл-обработчик .ashx, и он работал до тех пор, пока. Это соответствующая часть моего обработчика .ashx: context.Response.Clear() c.

    < Сильный > Обновление: TimedRotatingFileHandler не работает должным образом, когда я использую multiprocessing, что я должен делать с многопроцессорным ведением журнала? Я написал свой собственный класс Logger, как показано ниже, использую его как модуль во всех других скриптах Python. import logg.

    Таким образом, я смог взять многостраничный файл TIFF и преобразовать его в одно изображение jpeg, но он сглаживает TIFF. Под сглаживанием я подразумеваю, что он возвращает только первую страницу. Цель состоит в том, чтобы получить TIFF (через поток памяти), открыть каждую страницу TIFF и добавить.

    Читайте также: