0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 22

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

12.12.2019, 17:29. Показов 8142. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru