Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Покритикуйте код / 11 сообщений из 11, страница 1 из 1
20.11.2019, 16:57
    #39891853
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
Код: plaintext
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.
// запись в лог
	void AppendLog(std::string operation, std::string mess)
	{
		try
		{
			if (CreateDirectory(L"Logs", NULL) || ERROR_ALREADY_EXISTS == GetLastError())
			{
				// дата к названию файла
				time_t rawtime;
				struct tm * timeinfo;
				char bDateTime[80];
				time(&rawtime);
				timeinfo = localtime(&rawtime);
				strftime(bDateTime, sizeof(bDateTime), "_%d_%m_%Y", timeinfo);
				std::string path = "Logs\\test";
				path += bDateTime;
				path += ".txt";
				// формат строки сообщения
				//		дата
				strftime(bDateTime, sizeof(bDateTime), "%d-%m-%Y %H:%M:%S", timeinfo);				
				//		пользователь
				WCHAR username[UNLEN + 1];
				DWORD username_len = UNLEN + 1;
				GetUserName(username, &username_len);
				// формат строки
				std::string res;
				res += bDateTime;
				res += " | ";
				res += WC2MB(HostName());
				res += " | ";
				res += WC2MB(username);
				res += " | ";
				res += WC2MB(UserSID());
				res += " | ";
				res += "version: ";
				res += WC2MB(GetCurrVersion());
				res += " | ";
				res += operation;
				res += " | ";
				res += mess;
				res += "\n";
				// сохраняем в файл
				std::ofstream outfile;
				outfile.open(path, std::ios_base::app);
				outfile << res;
			}
		}
		catch (int ex)
		{
			std::cout << "AppendLog: " << "Caught exception number:  " << ex << std::endl;
		}
	}
...
Рейтинг: 0 / 0
20.11.2019, 18:03
    #39891918
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
Зачем эта колбаса? Выводи сразу в cout.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
std::string res;
				res += bDateTime;
				res += " | ";
				res += WC2MB(HostName());
				res += " | ";
				res += WC2MB(username);
				res += " | ";
				res += WC2MB(UserSID());
				res += " | ";
				res += "version: ";
				res += WC2MB(GetCurrVersion());
				res += " | ";
				res += operation;
				res += " | ";
				res += mess;
				res += "\n";
...
Рейтинг: 0 / 0
20.11.2019, 18:06
    #39891926
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
mayton
Зачем эта колбаса? Выводи сразу в cout.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
std::string res;
				res += bDateTime;
				res += " | ";
				res += WC2MB(HostName());
				res += " | ";
				res += WC2MB(username);
				res += " | ";
				res += WC2MB(UserSID());
				res += " | ";
				res += "version: ";
				res += WC2MB(GetCurrVersion());
				res += " | ";
				res += operation;
				res += " | ";
				res += mess;
				res += "\n";



в файл пишу, а не на консоль
...
Рейтинг: 0 / 0
20.11.2019, 18:12
    #39891932
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
listtoview, тем более. Пиши потоком. Зачем тебе толстая одна строка?
...
Рейтинг: 0 / 0
20.11.2019, 18:29
    #39891945
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
maytonЗачем тебе толстая одна строка?

Чтоб "слоники бегали" и тормозили нипадецки. Хотя тут ещё вопрос на засыпку: а буферизует
ли вывод std::ofstream и если да, то какого размера у него буфер.

Хотя на фоне создания каталога и открытия файла на каждый чих, разницы уже, наверное, никакой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.11.2019, 20:43
    #39892051
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
Должен буферизировать. Ну я надеюсь на это.
...
Рейтинг: 0 / 0
20.11.2019, 21:02
    #39892056
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
listtoview,
предварительная проверка длины (будущего) файла не требуется? с переименованием "заполненного" фацла
...
Рейтинг: 0 / 0
21.11.2019, 00:34
    #39892118
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
listtoview,

Готовый логгер никак не применить?
...
Рейтинг: 0 / 0
21.11.2019, 07:52
    #39892152
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
я бы CreateDirectory поменял на стантартную библиотеку.
сразу добавится переносимость


Код: plaintext
1.
2.
3.
std::ofstream outfile;
				outfile.open(path, std::ios_base::app);
				outfile << res;


а если не удалось записать, то сообщение пропадет.
а оно может быть очень важным и стоить много денег.

почему бы не вынести формирование строки с временем в отдельную функции? а еще лучше - просто требовать префикс сообщения сверху.
кто вызывает - тот пусть и подает что ему надо и как ему надо.
может там еще IP захочется прилепить?
...
Рейтинг: 0 / 0
21.11.2019, 07:58
    #39892154
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
operation похоже вообще не используется.

нужно у компилятора включить все предупреждения и включить трактование предупреждений как ошибки.
это обязательно.
...
Рейтинг: 0 / 0
21.11.2019, 08:04
    #39892158
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Покритикуйте код
listtoview
Код: plaintext
1.
CreateDirectory(L"Logs", NULL)


Подпапка Logs будет создана в текущей папке, а текущей может оказаться любая. Правильнее указать полный путь.

И как выше написали каждый раз не обязательно ее создавать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
static std::string log_folder;
if(log_folder.empty()) {
	log_folder = "Logs";
	if (!CreateDirectory(log_folder, NULL) && ERROR_ALREADY_EXISTS != GetLastError()) {
		// ошибка создания подпапки
		log_folder = "";
		return ...
	}
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Покритикуйте код / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]