/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Bedste måde at logge til fil...
Fra : Michael


Dato : 09-04-04 14:22

Findes der en hurtig/nem og ikke mindst sikker måde at logge til filer...
Evt. et modul?

Der skal være styr på sikkerheden..

--
Mvh
Michael



 
 
Peter Makholm (09-04-2004)
Kommentar
Fra : Peter Makholm


Dato : 09-04-04 14:45

"Michael" <maskinen2000@hotmail.com> writes:

> Findes der en hurtig/nem og ikke mindst sikker måde at logge til filer...

Ja. Søger man på search.cpan.org efter Log i Modules, så finder man et
hav af moduler. Langt de fleste ser dog ud til at være meget store og
implementerer alt tænkeligt og en køkkenvask.

Hvad er dine krav?

- Skal du kunne filtrerer på log-levels?
- Vil du have automatiske tidsstempler?
- Skal du bare logge en tekststreng, en fast række oplysninger eller
skal du kunne dumpe perl-objekter?
- Skal flere programmer kunne logge til samme fil?

Jeg klare mig ofte med bare er åbne et filhandle og skrive til
det. Det giver hverken filtrering, tidsstempler eller sikkerhed for at
flere filer skriver pænt til samme fil.

> Der skal være styr på sikkerheden..

Hvilken type sikkerhed er du ude efter?

Med mindre du vil logge data der kommer fra usikre kilder til filer
hvor du får navnet fra en usikker kilde tror jeg man skal anstrenge
sig for at lave et sikkerhedshul.

--
Peter Makholm | What if:
peter@makholm.net | Tanenbaum had convinced Linus that his
http://hacking.dk | operating system really was obsolete

Michael (09-04-2004)
Kommentar
Fra : Michael


Dato : 09-04-04 14:52

"Peter Makholm" <peter@makholm.net> skrev i en meddelelse
news:87hdvtqn95.fsf@xyzzy.adsl.dk...
> "Michael" <maskinen2000@hotmail.com> writes:
>
> > Findes der en hurtig/nem og ikke mindst sikker måde at logge til
filer...
>
> Ja. Søger man på search.cpan.org efter Log i Modules, så finder man et
> hav af moduler. Langt de fleste ser dog ud til at være meget store og
> implementerer alt tænkeligt og en køkkenvask.

Ja.. jeg blev også lidt forvirret.. Nu er jeg ikke så skrap til Perl, og det
gjorde det ikke bedre.

> Hvad er dine krav?
> - Skal du kunne filtrerer på log-levels?
> - Vil du have automatiske tidsstempler?
> - Skal du bare logge en tekststreng, en fast række oplysninger eller
........

Jeg har et lille script som smider en række inserts til en db.

Hvis disse inserts fejler, ønsker jeg egentligt bare en tekstfil med 1
insert pr. linie, således at jeg med et andet script kan pipe dem direkte
ind i db'en på et senere tidspunkt.

Så jeg skal ikke logge hvérken tidstempler, eller andre fancy ting. :)

> Jeg klare mig ofte med bare er åbne et filhandle og skrive til
> det. Det giver hverken filtrering, tidsstempler eller sikkerhed for at
> flere filer skriver pænt til samme fil.

Det kan godt være, det er vejen frem.

> > Der skal være styr på sikkerheden..
> Hvilken type sikkerhed er du ude efter?

Det var mere fordi hvis der f.eks. var flere scripts som loggede et større
antal linier til samme fil på samme tid.

--
Mvh
Michael



Michael (09-04-2004)
Kommentar
Fra : Michael


Dato : 09-04-04 15:01

"Michael" <maskinen2000@hotmail.com> skrev i en meddelelse
news:STxdc.1745$jg3.1558@news.get2net.dk...
> > Jeg klare mig ofte med bare er åbne et filhandle og skrive til
> > det. Det giver hverken filtrering, tidsstempler eller sikkerhed for at
> > flere filer skriver pænt til samme fil.
>
> Det kan godt være, det er vejen frem.

Jeg sidder lige og tænker på om man ikke bare kunne lave et systemkald,
a'la:

system("echo $besked >> fil");

Så er det *nix boksen som står for "sikkerheden" - Det giver måske et lille
overhead på denne måde, men det betyder ikke så meget.

Noget jeg bør tænke på?

--
Mvh
Michael



Stig H. Jacobsen (09-04-2004)
Kommentar
Fra : Stig H. Jacobsen


Dato : 09-04-04 20:15

On Fri, 9 Apr 2004 16:00:48 +0200, Michael wrote:

> Jeg sidder lige og tænker på om man ikke bare kunne lave et systemkald,
> a'la:
> system("echo $besked >> fil");

Det kan du godt, men det er ustyrligt langsomt ift. at lave det i
Perl - fordi der skal startes en shell for hver eneste linie du
vil logge.

Men hvis du åbner loggen i append-mode og slår I/O buffering fra,
så har du en rimelig god sikkerhed for at tingene bliver logget.

$| = 1; #no buffering
open(LOG, ">>michael.log");
print LOG localtime(), " blabla\n";
...

Når man disabler buffering, så bliver det også langsommere - det
er dog stadigvæk meget hurtigere end at logge vha. system() - men
til gengæld bliver der ikke cachet logdata af Perl - så du ikke
går glip af noget, hvis Perl crasher o.lign.

--
Stig
(remove the 'no's to send me mail)

Peter Makholm (09-04-2004)
Kommentar
Fra : Peter Makholm


Dato : 09-04-04 15:10

"Michael" <maskinen2000@hotmail.com> writes:

> Hvis disse inserts fejler, ønsker jeg egentligt bare en tekstfil med 1
> insert pr. linie, således at jeg med et andet script kan pipe dem direkte
> ind i db'en på et senere tidspunkt.

Det lyder som noget jeg bare ville åbne et filehandle til.

> > Hvilken type sikkerhed er du ude efter?
>
> Det var mere fordi hvis der f.eks. var flere scripts som loggede et større
> antal linier til samme fil på samme tid.

Men måske lave noget låsning. Hvilket styresystem arbejder du med?

Jeg ville måske gøre noget ala:

use Fcntl qw(:seek :flock);

open LOG, ">", "/path/til/logfil";

sub log {

# Lås og søg til enden
flock(LOG, LOG_EX);
seek(LOG, 0, SEEK_END);

# Skriv log-beskeden ud:
print LOG @_;

# Lås filen op. Perl sørger for at flushe filhandlet.
flock(LOG,LOCK_UN);
}

Hvis du ikke bruger noget der minder om unix vil det måske ikke
virke. Bemærk at ovenstående låsning ikke er påtvungen, det kræver at
alle dine scripts bruger noget kode der kalder flock.

--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux

Adam Sjøgren (09-04-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 09-04-04 15:06

On Fri, 9 Apr 2004 15:52:29 +0200, Michael wrote:

> Jeg har et lille script som smider en række inserts til en db.

> Hvis disse inserts fejler, ønsker jeg egentligt bare en tekstfil med
> 1 insert pr. linie, således at jeg med et andet script kan pipe dem
> direkte ind i db'en på et senere tidspunkt.

> Så jeg skal ikke logge hvérken tidstempler, eller andre fancy ting.
> :)

Skriv til en fil, og sørg for at alle scripts der skriver til den
bruger flock korrekt (se i manualen til flock).


Mvh.

--
"We are relaxed but nervous." Adam Sjøgren
asjo@koldfront.dk

Adam Sjøgren (09-04-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 09-04-04 15:01

On Fri, 9 Apr 2004 15:22:22 +0200, Michael wrote:

> Findes der en hurtig/nem og ikke mindst sikker måde at logge til
> filer... Evt. et modul?

Der findes en masse på CPAN; her er et udpluk:

Log::Dispatch - Dispatches messages to one or more outputs
<http://search.cpan.org/~drolsky/Log-Dispatch-2.10/lib/Log/Dispatch.pm>

Net::Daemon::Log - Utility functions for logging
<http://search.cpan.org/~jwied/Net-Daemon-0.38/lib/Net/Daemon/Log.pm>

Log::Agent - logging agent
<http://search.cpan.org/~mrogaski/Log-Agent-0.306/Agent.pm>

Log::Channel - yet another logging package
<http://search.cpan.org/~jmay/Log-Channel-0.6/Channel.pm>

Log::LogLite - The Log::LogLite class helps us create simple logs for
our application.
<http://search.cpan.org/~rani/Log-LogLite-0.82/LogLite.pm>

CGI::Log - Perl extension for centralized logging of debug, error,
status and success messages from scripts or other modules.
<http://search.cpan.org/~jmoore/CGI-Log-1.00/Log.pm>

Lad os vide hvad du finder ud af kan bruges.

> Der skal være styr på sikkerheden..

Hvordan mener du?


Mvh.

--
"We are relaxed but nervous." Adam Sjøgren
asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste