-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!newsfeed.straub
-nv.de!weretis.net!feeder4.news.weretis.net!rt.uk.eu.org!aioe.org!.POSTED!not-f
or-mail
From: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>
Newsgroups: pl.comp.programming
Subject: Re: Programowanie a system operacyjny
Date: Wed, 23 Jan 2013 16:16:01 +0000 (UTC)
Organization: Aioe.org NNTP Server
Lines: 167
Message-ID: <s...@j...net>
References: <kcgt7u$4un$1@speranza.aioe.org> <o...@s...asus>
<s...@j...net> <kci839$i6n$1@opal.futuro.pl>
<s...@j...net> <kck2ve$2ka$1@news.task.gda.pl>
<s...@j...net> <kck82i$etd$1@news.task.gda.pl>
<s...@j...net> <kckmog$dtn$1@mx1.internetia.pl>
<s...@j...net> <kcmbj6$pv4$1@mx1.internetia.pl>
<s...@j...net>
<50f177d7$0$26694$65785112@news.neostrada.pl>
<s...@j...net>
<50fec8f3$0$1294$65785112@news.neostrada.pl>
<s...@j...net>
<510003dd$0$26682$65785112@news.neostrada.pl>
NNTP-Posting-Host: 32kR2H3mw0v3HL1sSnS9/A.user.speranza.aioe.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit
X-Complaints-To: a...@a...org
User-Agent: slrn/pre1.0.0-18 (Linux)
X-Notice: Filtered by postfilter v. 0.8.2
Xref: news-archive.icm.edu.pl pl.comp.programming:201791
[ ukryj nagłówki ]On 2013-01-23, darekm <d...@e...com> wrote:
> W dniu 2013-01-22 22:33, Stachu 'Dozzie' K. pisze:
>> On 2013-01-22, darekm <d...@e...com> wrote:
>>>>>> Proszę bardzo, jedziesz. Ja w Perlu robię tak:
>>>>>> #v+
>>>>>> $logger->warn(msg "coś się zepsuło",
>>>>>> file => $filename, errorcode => $?, warning => $msg);
>>>>>> #v-
>>>>>>
>>>>>> Masz obiekt loggera z metodą do wysyłania ostrzeżeń. Potrzebujesz podać:
>>>>>> 1) własny komunikat
>>>>>> 2) nazwę pliku, którego np. otwarcie sprawiło problem
>>>>>> 3) kod błędu (errno lub analogiczny)
>>>>>> 4) treść komunikatu od systemu
>>>>>> Uwagi:
>>>>>> * 4) może zawierać cokolwiek i nie masz nad tym kontroli
>>>>>> * wpis w logu ma być czytelny dla człowieka i maszyny
>>>>>> * masz w kodzie móc dodać kolejne pola ad-hoc, bez edycji w innych
>>>>>> plikach czy miejscach bieżącego pliku
>> [...]
>>>> Oczywiście. Drzewa zasłaniają ci las.
>>>>
>>>> Nie interesuje mnie czas życia tego stringa. Nie interesuje mnie
>>>> przeciążanie funkcji warn, zwłaszcza że ona powinna być biblioteczna.
>>>> To, co mnie interesuje, to definiowanie pól w komunikacie ad-hoc,
>>>> w miejscu, w którym tworzę komunikat. *Bez przygotowań*, w tym bez
>>>> deklarowania dodatkowych zmiennych tylko na potrzeby logowania.
>>
>>> Prawdopodobnie wcale nie interesuje Cie jakiekolwiek rozwiązanie tego
>>> problemu.
>>
>> Oczywiście że interesuje mnie. Interesuje mnie rozwiązanie problemu,
>> który postawiłem. Mam utworzyć wpis i ten wpis posłać do miejsca
>> składowania logów. Po co mi do tego zadania znać jest czas życia obiektu
>> reprezentującego wpis?
>
> Każdy byt ma swój czas życia, wpis również, tyle że czas niektórych
> jest regulowany automatycznie, a innych ręcznie (przez programistę).
I to jest powód żebym się przejmował niskopoziomowym detalem przy
tworzeniu wpisu do logów? O_o
Przepraszam, ale od tego piszę w językach wyższego poziomu, żeby się nie
martwić o takie rzeczy.
> Szczególnie jest to istotne przy wołaniach asynchronicznych. Gdy chcę
> aby rzeczywisty wpis do pliku odbywał się poza ścieżką krytyczną, gdy
> jest więcej czasu.
>
> Poza tym piszesz:
> "Mam utworzyć wpis i ten wpis posłać do miejsca składowania logów"
>
> Rozumiem że:
> 1. Do miejsca składowania logów posyłam tylko teksty
Skąd ten pomysł? Gdzieś to napisałem? Może doucz się trochę, mój drogi?
Ten ruch się nazywa "structured logging".
> 2. Sposób tworzenia wpisu jest nieistotny, istotna jest notacja poleceń
Generalnie tak. Użycie loggera ma być tak łatwe dla programisty, jak to
tylko możliwe. Utworzenie specjalnej klasy dla wpisu, a potem utworzenie
instancji takiej klasy jest zbyt pracochłonne (m.in. dlatego, że to
wymaga otwarcia dodatkowego miejsca z definicją klasy przy dodawaniu
informacji).
> 3. Możesz zdefiniować: "ma być czytelny dla człowieka i maszyny"
Człowiek ma być w stanie skorzystać z takiego wpisu.
Maszyna ma być w stanie przetwarzać zestawy takich wpisów.
Ale specjalnie dla ciebie rozjaśnię, co ludzie rozumieją zwykle pod tymi
pojęciami.
Binarne formaty serializacji danych nie nadają się, bo człowiek nie jest
w stanie ich odczytać bez pomocy dodatkowych narzędzi.
Binarne formaty serializacji zapisane w formie tekstowej się nie nadają,
bo człowiek nie jest w stanie odczytać *treści* komunikatu, jedynie jego
*kontener*.
Twój ręcznie poskładany string się nie nadaje, bo jest niejednoznaczny.
Istnieje wiele wiadomości, które dają wpis o takiej samej formie.
>>> Istotna jest jedynie elastyczność rozwiązania, komplikacja zapisu oraz
>>> uzyskany efekt. Nieistotne jest czy to jest funkcja biblioteczna,
>>
>> Nieistotne? Powiedziałbym że całkiem ważne. Ja nie chcę *pisać* loggera,
>> ja chcę go *użyć*. Znaczy -- powinien pochodzić z gotowej biblioteki.\
>
> Dla mnie nieistotne.
Bo?
>>> Nie interesuje Cię czas życia, bo nie masz na to wpływu,
>>> nie interesuje Cię przeciążanie bo nie Perl nie ma takich możliwości
>>
>> Perl nie ma możliwości przeciążania? Mówisz o wywoływaniu funkcji
>> z różnymi typami parametrów czy o zmianie znaczenia operatorów
>> zdefiniowanych w języku dla własnych typów? Bo oba w Perlu występują
>> i nie wiem do czego pijesz.
>
> Mówię o różnych funkcjach dla różnych parametrów przy tej samej nazwie.
Aha. No to ma.
>>> A mnie nie interesuje aby była biblioteczna, bo mam różne oczekiwania co
>>> do logowania w zależności od rodzaju aplikacji/platformy.
>
>
>>
>> A jakie, że nie da się tego zawrzeć w bibliotece? Ja sobie takich nie
>> wyobrażam, ale ja głównie piszę daemony i programy wierszopoleceniowe,
>> więc mam dość wąską perspektywę.
>
> Pewnie dlatego. Oprócz powyższych mam jeszcze webowe i desktopowe.
I uważasz że biblioteka loggera nie poradzi sobie z tym? Możesz
uzasadnić swoje stanowisko?
>>> Ale mimo to przykładowa notacja (kilka wariantów):
>>>
>>> logger.warn( "coś się zepsuło"
>>> +'file'+FileName+eol
>>> +logger.param('errorcode,e.errorcode)
>>> +'obiekt=>'+logger.asAddress(myClass)
>>> +'warning=> uwaga');
>>>
>>> mogę przesłać wszystko, dowolną ilość pól,
>>> nic nie deklaruję
>>> mogę przesłać teksty i obiekty
>>
>> Ah so. I twoim zdaniem taki ręcznie sklejony string jest *równoważny*
>> przekazaniu loggerowi wpisu ze strukturą?
>
> A nie jest?
OCZYWIŚCIE ŻE NIE JEST. Jest niejednoznaczny, to po pierwsze. Po drugie,
żeby logger skorzystał ze struktury wiadomości musiałby specjalnie
parsować twojego ręcznie sklejonego stringa. Po trzecie, twój przykład
wygląda jak psu z gardła przez ten płotek konkatenacji, chociaż to już
moje osobiste uprzedzenie do tego typu konstrukcji.
> Nie ma problemu (ja nie mam) przekazania dowolnej struktury. XML, JSON
> tak działa.
Ale to programista musi nakarmić logger takim JSON-em. W perlowym
rozwiązaniu, które podałem jako referencję, to konfiguracja loggera
wybiera, w jakiej formie będzie zapisany log. A logger jest
konfigurowany już przez administratora, nie programistę.
>> Zresztą jestem ciekawy, jak chcesz to zrobić w Delphi utrzymując moje
>> wymagania (głównie możliwość dokładania pól ad-hoc), a tym bardziej przy
>> twojej propozycji w postaci klejenia stringa, który jest potem
>> przekazywany loggerowi.
>>
>
> 1. mogę zdefiniować szereg funkcji z jednym parametrem ogólnym oraz
> dodatkowymi konkretnymi (pierwsza ma zero typowanych)
>
> 2.mogę zdefiniować tag o konkretnej strukturze i wprowadzać go
> zdefiniowaną funkcją.
I które z tych dwóch pozwoli mi uruchomić logger.warn() z parą
("foobar", "a, b c\nDEF\txxx\", ;'") bez przeciążania logger.warn() na
okoliczność obecności "foobar"?
--
Secunia non olet.
Stanislaw Klekot
Następne wpisy z tego wątku
- 23.01.13 18:24 darekm
- 23.01.13 19:21 R.e.m.e.K
- 23.01.13 19:49 Stachu 'Dozzie' K.
- 23.01.13 20:00 Stachu 'Dozzie' K.
- 23.01.13 20:41 R.e.m.e.K
- 23.01.13 21:07 Stachu 'Dozzie' K.
- 24.01.13 12:44 darekm
- 26.01.13 13:57 Roman W
- 26.01.13 14:00 Roman W
- 27.01.13 00:07 Andrzej Jarzabek
- 27.01.13 00:49 Wojciech Muła
- 27.01.13 01:49 Roman W
- 27.01.13 01:50 Andrzej Jarzabek
- 27.01.13 01:51 Roman W
- 27.01.13 01:56 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-11 Idzie zima...czyli zaczynamy TETRIS :)
- 2024-12-11 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe
- 2024-12-11 Warszawa => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-12-11 Warszawa => Full Stack .Net Engineer <=
- 2024-12-11 Dyski HDD SATA 2,5'' >2TB
- 2024-12-11 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2024-12-11 Warszawa => System Architect (Java background) <=
- 2024-12-11 Warszawa => System Architect (background deweloperski w Java) <=
- 2024-12-10 sprężyny przednie ściśnięte
- 2024-12-10 Warszawa => SEO Specialist (15-20h tygodniowo) <=
- 2024-12-10 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-12-10 ciekawostka mandatowa
- 2024-12-09 Kolejny spaliniak się zjarał
- 2024-12-09 Katowice => Spedytor międzynarodowy <=
- 2024-12-09 Kraków => Senior PHP Developer <=