Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22

Логирование через java.util.logging

12.12.2019, 17:29. Показов 8048. Ответов 13
Метки java, log (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, у меня есть проект, в нем есть много System.out.println, по заданию преподавателя их нужно заменить своей реализацией логеров (насколько я понимаю, через java.util.logging.*, без применения сторонних логеров). Так же нужно, чтобы логи выдавались в консоль( как System.out) и сохранялись в файл. Если не сложно - подскажите, как это правильно реализовать, нужно ли создавать отдельный класс и тд.,( простой пример) потому что информации очень много и чем больше читаю, тем больше запутываюсь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2019, 17:29
Ответы с готовыми решениями:

Об эффективности протоколирования. В частности с использованием java.util.logging
представь себе. что нужно не просто отметиться типа logger.fine ("I had been here!"); , а насобирать данных (возможно, где-то в...

Logging в java
Объясните плз, как написать примитивный логинг в файл, используя java.util.logging. Я делаю следующее: ... try { r = new...

Использование java.util.Calendar
Здравствуйте! не снает ли кто нибудь. Имеется объект Date, построенный по определенному формату(SimpleDateFormat). Необходимо получить...

13
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.12.2019, 17:33
к преподу подойди и спроси, что конкретно надо сделать
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 17:39  [ТС]
Log all messages to Console and to File in user home directory via logger facade;
уже спросил:
-или же нужно качать SLF4J?
-Мы еще не учили сторонние логеры, это должна быть полностью своя реализация.
- то есть нужно через import.util.logging.* делать, верно?
-нет, нужно все самому писать.
Просто я не совсем понимаю, как можно без сторонних логеров и без import.util.logging сделать логер.

Добавлено через 3 минуты
Скорее всего, нужно создать свой класс, наследующий java.util.logging, и настроить его так, чтобы все логи сохранялись в файле и выводились в консоль.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.12.2019, 18:55
не надо скорее всего, конкретно узнай, что нужно сделать. Чтобы было понятно без хрустальных шаров.
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 19:20  [ТС]
Цитата Сообщение от Sergey_mm Посмотреть сообщение
нужно создать свой класс, наследующий java.util.logging, и настроить его так, чтобы все логи сохранялись в файле и выводились в консоль.
вот так нужно
0
33 / 25 / 11
Регистрация: 11.10.2019
Сообщений: 162
12.12.2019, 19:36
Sergey_mm, Скорее-всего, для начала тебе надо будет просто создать свой класс (желательно со словом Logger в названии), в котором будет метод принимающий текст в качестве параметра, и этот текст надо будет как напечатать на консоль (стандартным способом), так и сохранить в файл. Возможно текст/сообщение еще как-то подформатировать придется, например добавить временную метку.
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 19:53  [ТС]
Ладно, видимо лучше на примерах. Скину класс своего проекта, нужно систем ауты переделать в логи, чтобы они выводились в консоли и сохранялись в файл( logs.txt например)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package org.geekhub.crypto.coders;
 
import org.geekhub.crypto.history.CodingHistory;
import org.geekhub.crypto.util.CodecUnsupportedException;
import org.geekhub.crypto.util.IllegalCharacterException;
 
import java.util.Scanner;
 
import static org.geekhub.crypto.coders.Algorithm.CAESAR;
import static org.geekhub.crypto.coders.Algorithm.VIGENERE;
 
class EncodeMenu {
 
    private EncodersFactory encodeFactory = new EncodersFactory();
    private Encoder morseEncoder = encodeFactory.getEncoder(Algorithm.MORSE);
    private Encoder caesarEncoder = encodeFactory.getEncoder(Algorithm.CAESAR);
    private Encoder vigenereEncoder = encodeFactory.getEncoder(Algorithm.VIGENERE);
    private Encoder vigenereOverCaesarEncoder = encodeFactory.getEncoder(Algorithm.VIGENEREOVERCAESAR);
    private Encoder vigenere2xEncoder = encodeFactory.getEncoder((Algorithm.VIGENERE2X));
    private Encoder ukrEngEncoder = encodeFactory.getEncoder(Algorithm.UKRAINIANENGLISH);
 
    EncodeMenu(CodingHistory history) {
        this.history = history;
    }
 
    private CodingHistory history;
    private Scanner inn = new Scanner(System.in);
 
    void encodeMenu() throws CodecUnsupportedException, IllegalCharacterException {
        System.out.println("You have chosen encoding operation");
        System.out.println("Please choose codec name you want to use(print name of codec or number):");
        System.out.println("1.Caesar");
        System.out.println("2.Morse");
        System.out.println("3.Vigenere");
        System.out.println("4.First to Vigenere and then to Caesar");
        System.out.println("5.Vigenere two times");
        System.out.println("6.English-Ukrainian translator");
 
        String userCodecEncode = inn.nextLine().toLowerCase();
        {
 
            switch (userCodecEncode) {
                case "1":
                case "caesar":
                    history.getCodecs().add(CAESAR);
                    history.getData().add("Codec name: Caesar");
                    history.dateAdd();
                    System.out.println("Enter text to encode");
                    String userCaesarEncode = inn.nextLine().toLowerCase();
                    if(!userCaesarEncode.matches("[a-z]*")){
                        throw new IllegalCharacterException("Unsupported symbols" + "["+userCaesarEncode+"]");
                    } else {
                        history.getData().add("Text to encode: " + " " + userCaesarEncode);
                        history.dateAdd();
                        System.out.println("Encoded text:" + " " + caesarEncoder.encode(userCaesarEncode));
                        history.getData().add("Encoded text: " + " " + caesarEncoder.encode(userCaesarEncode));
                        history.dateAdd();
                        System.out.println("..........................................");
                    }
 
            break;
            case "2":
            case "morse":
                history.getCodecs().add(Algorithm.MORSE);
                history.getData().add("Codec name: Morse");
                history.dateAdd();
                System.out.println("Enter text to encode");
                String userMorseEncode = inn.nextLine().toLowerCase();
                if(!userMorseEncode.matches("[a-z]*")){
                    throw new IllegalCharacterException("Unsupported symbols" + "["+userMorseEncode+"]");
                } else {
                    history.getData().add("Text to encode :" + " " + userMorseEncode);
                    history.dateAdd();
                    System.out.println("Encoded text: " + morseEncoder.encode(userMorseEncode));
                    history.getData().add("Encoded text: " + " " + morseEncoder.encode(userMorseEncode));
                    history.dateAdd();
                    System.out.println("..........................................");
                }
                break;
            case "3":
            case "vigenere":
                history.getCodecs().add(VIGENERE);
                history.getData().add("Codec name: Vigenere");
                history.dateAdd();
                System.out.println("Enter text to encode");
                String VigenereEncode = inn.nextLine().toLowerCase();
                if(!VigenereEncode.matches("[a-z]*")) {
                    throw new IllegalCharacterException("Unsupported symbols" + "[" + VigenereEncode + "]");
                } else {
                    history.getData().add("Text to encode :" + " " + VigenereEncode);
                    history.dateAdd();
                    System.out.println("Encoded text: " + vigenereEncoder.encode(VigenereEncode));
                    history.getData().add("Encoded text: " + " " + vigenereEncoder.encode(VigenereEncode));
                    history.dateAdd();
                }
                break;
            case "4":
            case "VigenereOverCaesar":
                history.getCodecs().add(Algorithm.VIGENEREOVERCAESAR);
                history.getData().add("Codec name: VigenereOverCaesar");
                history.dateAdd();
                System.out.println("Enter text to encode");
                String VigenereOverCaesar = inn.nextLine().toLowerCase();
                if(!VigenereOverCaesar.matches("[a-z]*")){
                    throw new IllegalCharacterException("Unsupported symbols" + "["+VigenereOverCaesar+"]");
                } else {
                    history.getData().add("Text to encode: " + " " + VigenereOverCaesar);
                    history.dateAdd();
                    System.out.println("Encoded text(from english to caesar, and then to vigenere):"
                            + " " + vigenereOverCaesarEncoder.encode(VigenereOverCaesar));
                    history.getData().add("Encoded text(from english to caesar, and then to vigenere):" +
                            " " + " " + vigenereOverCaesarEncoder.encode(VigenereOverCaesar));
                    history.dateAdd();
                }
                break;
 
            case "5":
            case "Vigenere2X":
                history.getCodecs().add(Algorithm.VIGENERE2X);
                history.getData().add("Codec name: Vigenere2X");
                history.dateAdd();
                System.out.println("Enter text to encode");
                String VigenereTwo = inn.nextLine().toLowerCase();
                if(!VigenereTwo.matches("[a-z]*")){
                    throw new IllegalCharacterException("Unsupported symbols" + "["+VigenereTwo+"]");
                } else {
                    history.getData().add("Text to encode:" + " " + VigenereTwo);
                    history.dateAdd();
                    System.out.println(" Encoded text(vigenere 2 times):" + " " + vigenere2xEncoder.encode(VigenereTwo));
                    history.getData().add(" Encoded text(vigenere 2 times):" + " " + vigenere2xEncoder.encode(VigenereTwo));
                    history.dateAdd();
                }
                break;
            case "6":
            case "english":
            case "ukrainian":
            case "english-ukrainian":
                history.getCodecs().add((Algorithm.UKRAINIANENGLISH));
                history.getData().add("Codec name: UkrainianEnglish");
                history.dateAdd();
                System.out.println("Enter text to encode");
                String engEncode = inn.nextLine().toLowerCase();
                if(!engEncode.matches("[a-z]*")){
                    throw new IllegalCharacterException("Unsupported symbols" + "["+engEncode+"]");
                } else {
                    history.getData().add("Text to encode:" + " " + engEncode);
                    history.dateAdd();
                    System.out.println("Encoded text from english to ukrainian:" + " " + ukrEngEncoder.encode(engEncode));
                    history.getData().add("Encoded text from english to ukrainian:" + " " + ukrEngEncoder.encode(engEncode));
                    history.dateAdd();
                    break;
                }
            default:
                throw new CodecUnsupportedException("You have selected unsupported codec:" + " " + userCodecEncode);
 
 
        }
    }
}
}
я знаю, что есть много косяков в коде, не оптимизирован и тд, но я только учусь
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.12.2019, 21:13
вопрос в чем?
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 21:15  [ТС]
нужен пример, как System.out.println переделать на логи, которые будут выводиться в консоль и сохраняться в файл, при помощи стандартных логов jvm, без установки сторонних логеров типа SLF4J.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.12.2019, 21:19
Цитата Сообщение от Sergey_mm Посмотреть сообщение
- то есть нужно через import.util.logging.* делать, верно?
-нет, нужно все самому писать.
ты кажется сам себе противоречишь?
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 21:26  [ТС]
ты кажется сам себе противоречишь?
я уточнил, преподаватель говорил по поводу сторонних логеров
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.12.2019, 21:33
ну создаешь логгер, логируешь
Java
1
2
3
4
    private static final Logger logger = Logger.getLogger(App.class.getName());
    public static void main(String[] args) {
        logger.log(Level.INFO, "Logged!");
    }
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22
12.12.2019, 22:02  [ТС]
С этим понятно. А как приделать, чтобы "Logged!" сохранялось в файле? для этого нужно отдельно писать data.add("Logged") или же можно дописать в logger.log(Level.INFO, "Logged!")?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.12.2019, 00:31
Лучший ответ Сообщение было отмечено Sergey_mm как решение

Решение

про гугл же слышал?
https://stackoverflow.com/ques... ing-logger
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2019, 00:31
Помогаю со студенческими работами здесь

Ошибка import java util
Всем привет.Ситуация такая.Решил попробовать разработку под Android. Установил Android SDK, в его комплект входит eclipse и параллельно...

Есть такое? XML + java.util.Properties
Нужен какой метод чтобы класс Пропертиес записать в хмл формате. задача проста конечно, просто подумал может уже есть че-то подобное в...

javax.wsdl.Part не имплементирует java.util.List.
Господа! Есть некий класс SomeForm extends ActionForm и у него поле private List parts. При этом в struts-config'e указано ...

Беда какая-то Mac OS-Citrix(на NT)-java.util.Date :(
Проблема в следующем, есть приложение которое работает на NT сервере на нем же установлен Citrix сервер, есть клиенты на Windows платформе...

Util.xmlToFile
где достать библиотеку util, в которой есть xmlToFile ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru