Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Apache Logfile- Größe begrenzen

Frage Linux Apache Server

Mitglied: Franzmann

Franzmann (Level 1) - Jetzt verbinden

29.10.2007, aktualisiert 18.10.2012, 12599 Aufrufe, 41 Kommentare

Hallo,
wie der Titel schon sagt.
Wie kann ich es anstellen das die Logfiles meines Apachen nicht unendlich groß werden ?
Ich möchte die Größe gerne auf eine bestimmte MB-Zahl begrenzen.
Jemand ne Idee ?
41 Antworten
Mitglied: TuXHunt3R
29.10.2007 um 23:23 Uhr
Wie genau stellst du dir das dann vor? Sollen die ältesten Einträge beim Erreichen dieser MB-Grenze dann aus der Datei gelöscht werden oder wie genau?
Bitte warten ..
Mitglied: IRIXuser
30.10.2007 um 07:47 Uhr
läuft dein apache unter linux oder windows?

unter linux gibt es nettes programm namens sed (stream oriented editor). damit kannst du in einer beliebigen datei nach bestimmten zeilen suchen und die löschen oder editieren. eine genaue beschreibung des editors erhälst du aus den manual pages ( man sed ).
damit solltest du dein problem lösen können. die zeilen beginnen immer mit einem bestimmten muster (zeit, datum). du suchst mit dem sed z.B nach zeilen die älter sind als X tagen und löscht sie einfach. um die größe zu beeinflussen, müsste man mehr aufwand betreiben. ersteinmal die größe der datei ermitteln, ist sie größer als deine vorgabe, löscht du eine bestimmte anzahl an zeilen in der datei. das kann man mit einem shellscript realisieren, das wiederum mit cron gestartet wird, wenn der rechner startet oder nach einer bestimmten zeitvorgabe dein logfile überprüft.
Bitte warten ..
Mitglied: Biber
30.10.2007 um 07:51 Uhr
...und wenn Linux, dann doch auf jeden Fall die tonnenweise im Netz vorhandenen "logrotate"-Skripte suchen und nutzen.

Grüße
Biber
Bitte warten ..
Mitglied: IRIXuser
30.10.2007 um 07:59 Uhr
.... ja na klar! warum das rad neu erfinden? aber mit dem sed üben macht spass und lehrt den umgang mit regular expressions {;-]
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 08:19 Uhr
Erstmal thx@all
Soll auf nem W2K3 Server passieren.
Also am besten wäre es, wenn ein bestimmtes Limit erreicht ist, löscht er die letzten
100 EInträge zum Beispiel. Nach Zeitstempel könnte man aber auch arbeiten.
Werde mir mal "logrotate"-Skripte und sed anschauen !
So far...
Bitte warten ..
Mitglied: IRIXuser
30.10.2007 um 08:39 Uhr
hallo,

also mit windows server kenn ich mich nicht so gut aus.
soweit ich weiss, ist sed nur unter UNIX zu benutzen.

aber es gibt hier bestimmt teilnehmer, die sich mit windows auskennen......
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 09:19 Uhr
Hey,
ja kein Ding.
Hab gerade festgestellt das beide angesprochenen Varianten nur für Linux/ Unix gelten
Muss ich mal weitersuchen...
Bitte warten ..
Mitglied: bastla
30.10.2007 um 13:38 Uhr
Hallo Franzmann!

"GNU sed v4.0.7" für DOS/Windows findest Du, zusammen mit anderen Versionen, zB hier ...

Grüße
bastla
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 14:45 Uhr
Ok habe es jetzt wie folgt angefangen.
Das Skript hab ich mir hier im Forum gesucht:
@echo off & setlocal
set "Summary=D:\error_summary.log"
set "Filter=?????"

if exist "%Summary%" del "%Summary%"
for %%i in (D:\error.log) do (
findstr /b "%Filter%" "%%i">nul && (
echo Logfilename: %%i
for /f "delims=" %%a in ('findstr /b "%Filter%" "%%i"') do echo %%a
echo.
)>>"%Summary%"
if exist "%Summary%" ren "%Summary%" error.log
)

Wie stelle ich es jetzt noch an, den Filter so zu setzen das er mir Logeinträge die älter als 5Tage sind löscht. Das Format sieht so aus:
[Wed Sep 12 10:11:51 2007]
set "Filter=..."
%day% %date% %time% %year%
Bitte warten ..
Mitglied: IRIXuser
30.10.2007 um 15:08 Uhr
@Franzmann

Also ich muss da leider passen. Würde dir gern helfen, aber ich kenne die Syntax nicht. (ist das VBS? oder Batch? ).

Aber ich werde den Beitrag weiter verfolgen um zu sehen wie man sowas unter Windows realisiert.

Viel Erfolg weiterhin...
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 15:16 Uhr
@Franzmann

Also ich muss da leider passen. Würde
dir gern helfen, aber ich kenne die Syntax
nicht. (ist das VBS? oder Batch? ).

Ist ne Batch
Aber ich werde den Beitrag weiter verfolgen
um zu sehen wie man sowas unter Windows
realisiert.
Nicht so einfach ;)

Viel Erfolg weiterhin...
Danke !
Bitte warten ..
Mitglied: bastla
30.10.2007 um 15:42 Uhr
Hallo Franzmann!

Nicht so einfach ;)
... würde ich bei diesem Datumsformat ([Wed Sep 12 10:11:51 2007]) auch sagen, daher folgende Fragen:
  • Könntest (wolltest) Du das Format auf "YYYY-MM-DD ..." (oder noch besser "YYYYMMDD ...") ändern, bzw falls nicht:
  • Wird der Tag mit oder ohne führende Null geschrieben ("Wed Sep 05" oder "Wed Sep 5")?
  • Steht Datum/Zeit tatsächlich zwischen "[" und "]"?
  • Könnte es sein, dass der String "Sep 12" auch in Zeilen auftaucht, die nicht gelöscht werden sollen?

Grüße
bastla
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 15:53 Uhr
Hab gerade schon gemerkt das es zu kompliziert wird.
@bastla:
Hab das nun anders vor.
Das Skript soll alle Zeilen löschen bis auf die letzten X Zeilen.
Kannst du mir sagen wie ich das anstelle ?
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 16:17 Uhr
Ach ja...ganz vergessen...
* Könntest (wolltest) Du das Format auf "YYYY-MM-DD ..." (oder noch besser "YYYYMMDD ...") ....
Nein geht nicht !
* Wird der Tag mit oder ohne führende Null geschrieben ("Wed Sep 05" oder "Wed Sep 5")?
[Wed Sep 05 10:11:51 2007] mit führender Null
* Steht Datum/Zeit tatsächlich zwischen "[" und "]"?
JA
* Könnte es sein, dass der String "Sep 12" auch in Zeilen auftaucht, die nicht gelöscht werden sollen?
JA
Bitte warten ..
Mitglied: bastla
30.10.2007 um 17:02 Uhr
Hallo Franzmann!

Auf Deinem ursprünglichen Vorhaben basierend (die Einträge der ersten 5 Tage zu löschen), könnte ich folgenden Batch zum Testen anbieten:
01.
@echo off & setlocal 
02.
set "Log=D:\Apache-TestLog.txt" 
03.
set "Days=4" 
04.
 
05.
set "Src=%temp%\ALogTemp.txt" 
06.
set "Dst=%temp%\ALog.txt" 
07.
set "GFD=%temp%\GetFormattedDate.vbs" 
08.
echo sM=",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec":aM=Split(sM,","):aW=Array("","Sun","Mon","Tue","Wed","Thu","Fri","Sat")>%GFD% 
09.
echo iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else iM=(iM+2)/4>>%GFD% 
10.
echo dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then WScript.Quit(1)>>%GFD% 
11.
echo WScript.Echo aW(Weekday(dtD))^&" "^&aM(Month(dtD))^&" "^&Right("0"^&Day(dtD),2)>>%GFD% 
12.
set /p FirstLine=<"%Log%" 
13.
for /f "tokens=2,3,5 delims=[] " %%i in ('echo %FirstLine%') do set "Dat=%%i %%j %%k" 
14.
 
15.
copy "%Log%" "%Dst%">nul 
16.
for /l %%d in (0,1,%Days%) do call :RemoveDeltaDayLogEntries %%d 
17.
move "%Dst%" "%Log%" 
18.
goto :eof 
19.
 
20.
:RemoveDeltaDayLogEntries 
21.
for /f "delims=" %%i in ('cscript //nologo %GFD% %1 %Dat%') do set "Filter=%%i" 
22.
if not defined Filter goto :eof 
23.
echo Entferne Zeilen mit Datum: %Filter% 
24.
move "%Dst%" "%Src%" 
25.
findstr /v /b "[%Filter%" "%Src%" > "%Dst%"
Eigentlich müsstest Du nur die Pfadangabe zur Logdatei (bitte eine Kopie verwenden) in der ersten "set"-Zeile anpassen und danach den Batch starten, um alle Einträge mit dem ältesten Datum und den 4 (siehe zweite "set"-Zeile) darauf folgenden Tagen zu entfernen.

Voraussetzung ist dabei, dass bereits die erste Logdatei-Zeile (und natürlich alle weiteren) mit dem von Dir beschriebenen Datumsformat ([Wed Sep 12 10:11:51 2007]) beginnt (also keine Kopfzeile vorhanden ist), da aus dieser ersten Zeile das älteste Datum ermittelt wird.

Grüße
bastla

P.S.: Muss leider weg und bin erst am späteren Abend wieder zurück.
Bitte warten ..
Mitglied: Franzmann
30.10.2007 um 17:26 Uhr
Hey,
vielen Dank, werds gleich morgen ausprobieren.
Muss jetzt auch weg...
So far, thx a lot :D
Bitte warten ..
Mitglied: IRIXuser
30.10.2007 um 18:46 Uhr
hallo,

wenn sed für windows erhältlich ist, dann kann man auch mit der suchmustererkennung die zeilen, welche man löschen möchte erkennen. mit hilfe von suchmustern und feldern sollte es klappen.
wir wissen, das ein blank zwischen dem zeitformat vorhanden ist also können wir auch den wochentag überlesen und an der stelle des datums beginnen.

z.B. kann man mit
! -> sed -n '1,20p' dateiname
die ersten 20 zeilen anzeigen lassen.
um eine zeile zu löschen die ein "muster" enthält. kann man schreiben
! -> sed '/muster/d' dateiname
nun müssen wir noch den wochentag überlesen und das "muster" mit hilfe von regulären ausdrücken ersetzen.
! -> sed '/* [aA-zZ] [01][0-9] [01]:[0-5]·[0-9]/d'

ich hoffe das ich mich noch recht erinnere....
ich versuche das mal zu erleutern.
  • irgendein zeichen egal welches, dann ein blank, dann um den wochentag zu überlesen alle buchstaben egal ob groß oder klein, dann wieder ein blank, dann den monatstag, dann das zeitformat.
um nun die gewünschten zeilen zu löschen, sollte man das format wählen, dass das intervall von - bis löscht.

ich bin nicht mehr ganz sicher, ist einfach zu lange her. aber so in der art haben wir das im studium gelernt.
man sed
gibt die genaue anleitung .
wie schon gesagt: ist für linux aber weiter oben hat jemand gesagt, dass es sed auch für windows gibt.
Bitte warten ..
Mitglied: Biber
30.10.2007 um 20:27 Uhr
Hmmm, bei sowas mach ich gerne mit...

* Könntest (wolltest) Du das Format auf "YYYY-MM-DD ..." (oder noch besser "YYYYMMDD ...") ....

Nein geht nicht !

Klar geht das. Selbst unter Windows, da wette ich...

Laut meiner Recherche hier ist
The common log format is defined like this:

%h %l %u %t "%r" %>s %b

...mit %t als diese Standarddarstellung des Timestamps.
...und etwas tiefer steht...
Configurable Format Reference
Here are all the % sequences allowed in the configurable log format in Apache.

%b bytes sent, excluding HTTP headers
...
....
%t time, in common log format time format
%{format}t The time, in the form given by format, which should be in strftime format


....was bedeuten könnte, mit einem (sinngemäß/ungetestet!) Befehl
01.
LogFormat %{"%YY-%mm-%dd %HH:%MM:%SS")t {und der Rest der Zeile nach Belieben} 
02.
-oder- 
03.
LogFormat %{"%YYYY%%mm%dd %HH:%MM:%SS")t
...sollte das Leben und das Logfile einfacher werden.

Grüße
Biber
Bitte warten ..
Mitglied: Franzmann
31.10.2007 um 07:47 Uhr
Hallo Franzmann!

Auf Deinem ursprünglichen Vorhaben
basierend (die Einträge der ersten 5
Tage zu löschen), könnte ich
folgenden Batch zum Testen anbieten:
01.
@echo off & setlocal 
02.
> set "Log=D:\Apache-TestLog.txt" 
03.
> set "Days=4" 
04.
>  
05.
> set "Src=%temp%\ALogTemp.txt" 
06.
> set "Dst=%temp%\ALog.txt" 
07.
> set 
08.
> "GFD=%temp%\GetFormattedDate.vbs" 
09.
> echo 
10.
> sM=",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec":aM=Split(sM,","):aW=Array("","Sun","Mon","Tue","Wed","Thu","Fri","Sat")>%GFD% 
11.
> echo 
12.
> iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If 
13.
> iM=0 Then WScript.Quit(1) Else 
14.
> iM=(iM+2)/4>>%GFD% 
15.
> echo 
16.
> dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If 
17.
> Not IsDate(dtD) Then 
18.
> WScript.Quit(1)>>%GFD% 
19.
> echo WScript.Echo 
20.
> aW(Weekday(dtD))^&" 
21.
> "^&aM(Month(dtD))^&" 
22.
> "^&Right("0"^&Day(dtD),2)>>%GFD% 
23.
> set /p FirstLine=<"%Log%" 
24.
> for /f "tokens=2,3,5 delims=[] " 
25.
> %%i in ('echo %FirstLine%') do set 
26.
> "Dat=%%i %%j %%k" 
27.
>  
28.
> copy "%Log%" 
29.
> "%Dst%">nul 
30.
> for /l %%d in (0,1,%Days%) do call 
31.
> :RemoveDeltaDayLogEntries %%d 
32.
> move "%Dst%" "%Log%" 
33.
> goto :eof 
34.
>  
35.
> :RemoveDeltaDayLogEntries 
36.
> for /f "delims=" %%i in 
37.
> ('cscript //nologo %GFD% %1 %Dat%') 
38.
> do set "Filter=%%i" 
39.
> if not defined Filter goto :eof 
40.
> echo Entferne Zeilen mit Datum: %Filter% 
41.
> move "%Dst%" "%Src%" 
42.
> findstr /v /b "[%Filter%" 
43.
> "%Src%" > "%Dst%" 
44.
> 
Eigentlich müsstest Du nur
die Pfadangabe zur Logdatei (bitte eine Kopie
verwenden) in der ersten
"set"-Zeile anpassen und danach den
Batch starten, um alle Einträge mit dem
ältesten Datum und den 4 (siehe zweite
"set"-Zeile) darauf folgenden Tagen
zu entfernen.

Voraussetzung ist dabei, dass bereits die
erste Logdatei-Zeile (und natürlich alle
weiteren) mit dem von Dir beschriebenen
Datumsformat ([Wed Sep 12 10:11:51 2007])
beginnt (also keine Kopfzeile vorhanden ist),
da aus dieser ersten Zeile das älteste
Datum ermittelt wird.

Grüße
bastla

Hab das gerade mal per Eingabeaufforderung ausprobiert.
Funktioniert leider nicht, bekommen die Meldung:
"configured" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Bitte warten ..
Mitglied: Franzmann
31.10.2007 um 09:33 Uhr
Hmmm, bei sowas mach ich gerne mit...

>> * Könntest (wolltest) Du das
Format auf "YYYY-MM-DD ..." (oder
noch besser "YYYYMMDD ...") ....
>
> Nein geht nicht !

Klar geht das. Selbst unter Windows, da
wette ich...

Laut meiner Recherche
[http://www.apacheweek.com/features/logfiles
hier] ist
The common log format is defined
like this:

%h %l %u %t "%r" %>s %b

...mit %t als diese Standarddarstellung des
Timestamps.
...und etwas tiefer steht...
Configurable Format Reference
Here are all the % sequences allowed in the
configurable log format in Apache.

%b bytes sent, excluding HTTP headers
...
....
%t time, in common log format time format

%{format}t The time, in the form given by
format, which should be in strftime format


....was bedeuten könnte, mit einem
(sinngemäß/ungetestet!) Befehl
01.
LogFormat %{"%YY-%mm-%dd 
02.
> %HH:%MM:%SS")t {und der Rest der Zeile 
03.
> nach Belieben} 
04.
> -oder- 
05.
> LogFormat %{"%YYYY%%mm%dd 
06.
> %HH:%MM:%SS")t 
07.
> 
...sollte das Leben und das Logfile
einfacher werden.

Grüße
Biber
@ Biber:
Wie müsste das dann in etwa aussehen ?
So ?

@echo off & setlocal
set "Summary=D:\error_summary.log"
set "Filter=/* [aA-zZ] [01][0-9] [01]:[0-5]·[0-9]/d"

if exist "%Summary%" del "%Summary%"
...
..
.
Bitte warten ..
Mitglied: IT-MaD
31.10.2007 um 10:37 Uhr
ich bin auch auf der Suche nach einer Lösung für dieses Problem ... bin dann hier auf diesen Beitrag gestossen ...

ich hatte das gestern Abend auch mal gestestet ... ich kriege eine ähnliche Fehlermeldung ... bei mir kann "DAV/2" syntaktisch nicht verarbeitet werden ... kann mir leider nur keinen Reim draus machen
Bitte warten ..
Mitglied: bastla
31.10.2007 um 10:55 Uhr
Hallo Franzmann und IT-MaD!

Könntet Ihr bitte (zwischen "<code>"-Tags) jeweils die ersten 10 Zeilen (auch anonymisiert - es geht nur um das Format) Eurer Logs posten?

Grüße
bastla
Bitte warten ..
Mitglied: IT-MaD
31.10.2007 um 11:01 Uhr
aber klar doch ... vielen Dank schon mal für die Hilfe ...

01.
[Thu Sep 20 21:50:22 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 configured -- resuming normal operations 
02.
[Thu Sep 20 21:50:22 2007] [notice] Server built: Mar  5 2007 11:23:00 
03.
[Thu Sep 20 21:50:22 2007] [notice] Parent: Created child process 2720 
04.
[Thu Sep 20 21:50:24 2007] [notice] Child 2720: Child process is running 
05.
[Thu Sep 20 21:50:24 2007] [notice] Child 2720: Acquired the start mutex. 
06.
[Thu Sep 20 21:50:24 2007] [notice] Child 2720: Starting 250 worker threads. 
07.
[Thu Sep 20 21:50:24 2007] [notice] Child 2720: Starting thread to listen on port 443. 
08.
[Thu Sep 20 21:50:24 2007] [notice] Child 2720: Starting thread to listen on port 80. 
09.
[Fri Sep 21 06:32:18 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 configured -- resuming normal operations 
10.
[Fri Sep 21 06:32:18 2007] [notice] Server built: Mar  5 2007 11:23:00 
11.
[Fri Sep 21 06:32:18 2007] [notice] Parent: Created child process 1880 
12.
[Fri Sep 21 06:32:19 2007] [notice] Child 1880: Child process is running 
13.
[Fri Sep 21 06:32:19 2007] [notice] Child 1880: Acquired the start mutex. 
14.
[Fri Sep 21 06:32:19 2007] [notice] Child 1880: Starting 250 worker threads. 
15.
[Fri Sep 21 06:32:19 2007] [notice] Child 1880: Starting thread to listen on port 80. 
16.
[Fri Sep 21 06:32:19 2007] [notice] Child 1880: Starting thread to listen on port 443. 
17.
[Fri Sep 21 17:54:13 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 configured -- resuming normal operations 
18.
[Fri Sep 21 17:54:13 2007] [notice] Server built: Mar  5 2007 11:23:00 
19.
[Fri Sep 21 17:54:13 2007] [notice] Parent: Created child process 2056 
20.
[Fri Sep 21 17:54:14 2007] [notice] Child 2056: Child process is running 
21.
[Fri Sep 21 17:54:14 2007] [notice] Child 2056: Acquired the start mutex. 
22.
[Fri Sep 21 17:54:14 2007] [notice] Child 2056: Starting 250 worker threads. 
23.
[Fri Sep 21 17:54:14 2007] [notice] Child 2056: Starting thread to listen on port 443. 
24.
[Fri Sep 21 17:54:14 2007] [notice] Child 2056: Starting thread to listen on port 80.
Bitte warten ..
Mitglied: Franzmann
31.10.2007 um 11:05 Uhr
01.
[Wed Sep 12 10:11:51 2006] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
02.
[Wed Sep 12 10:11:51 2006] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
03.
[Wed Sep 12 10:11:51 2006] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
04.
[Wed Sep 12 10:11:51 2006] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
05.
[Wed Sep 12 10:11:51 2007] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
06.
[Wed Sep 12 10:11:51 2007] [notice] Apache/2.2.4 (Win32) configured -- resuming normal operations 
07.
[Wed Sep 12 10:11:51 2007] [notice] Server built: Jan  9 2007 23:17:20 
08.
[Wed Sep 12 10:11:51 2007] [notice] Parent: Created child process 880 
09.
[Wed Sep 12 10:11:51 2007] [notice] Child 880: Child process is running 
10.
[Wed Sep 12 10:11:51 2007] [notice] Child 880: Acquired the start mutex.
Danke !!
Bitte warten ..
Mitglied: bastla
31.10.2007 um 11:30 Uhr
Hallo!

Neuer Versuch:
01.
@echo off & setlocal 
02.
set "Log=D:\Apache-TestLog.txt" 
03.
set /a Days=5 
04.
 
05.
set "Src=%temp%\ALogTemp.txt" 
06.
set "Dst=%temp%\ALog.txt" 
07.
set "GFD=%temp%\GetFormattedDate.vbs" 
08.
echo sM=",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec":aM=Split(sM,","):aW=Array("","Sun","Mon","Tue","Wed","Thu","Fri","Sat")>%GFD% 
09.
echo iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else iM=(iM+2)/4>>%GFD% 
10.
echo dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then WScript.Quit(1)>>%GFD% 
11.
echo WScript.Echo aW(Weekday(dtD))^&" "^&aM(Month(dtD))^&" "^&Right("0"^&Day(dtD),2)>>%GFD% 
12.
set /p FirstLine=<%Log% 
13.
set FirstLine=%FirstLine:~0,26% 
14.
for /f "tokens=2,3,5 delims=[] " %%i in ('echo %FirstLine%') do set "Dat=%%i %%j %%k" 
15.
set /a Days-=1 
16.
 
17.
copy "%Log%" "%Dst%">nul 
18.
for /l %%d in (0,1,%Days%) do call :RemoveDeltaDayLogEntries %%d 
19.
move "%Dst%" "%Log%" 
20.
goto :eof 
21.
 
22.
:RemoveDeltaDayLogEntries 
23.
for /f "delims=" %%i in ('cscript //nologo %GFD% %1 %Dat%') do set "Filter=%%i" 
24.
if not defined Filter goto :eof 
25.
echo Entferne Zeilen mit Datum: %Filter% 
26.
move "%Dst%" "%Src%" 
27.
findstr /v /b "[%Filter%" "%Src%" > "%Dst%"
Neben einer Korrektur/Ergänzung gibt es noch eine Änderung: Die in der Zeile "set /p Days=5" angegebene Tageanzahl muss nicht (wie in der ersten Version) um 1 vermindert sein, sondern entspricht jetzt der Anzahl der zu löschenden Tage (also im Beispiel: 5).

Grüße
bastla
Bitte warten ..
Mitglied: Franzmann
31.10.2007 um 11:51 Uhr
Also lokal auf meinem Rechner funktioniert es super.
Wenn ich es auf meinen Windows2003 Server ausprobiere, bekomme ich folgende Meldung:
echo ist off
01.
ECHO ist ausgeschaltet (OFF). 
02.
Der Befehl "sM" ist entweder falsch geschrieben oder 
03.
konnte nicht gefunden werden. 
04.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch. 
05.
iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else 
06.
Der Befehl "iM" ist entweder falsch geschrieben oder 
07.
konnte nicht gefunden werden. 
08.
dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then 
09.
Der Befehl "WScript.Quit" ist entweder falsch geschrieben oder 
10.
konnte nicht gefunden werden. 
11.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
12.
 
13.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
14.
 
15.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
16.
 
17.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
18.
 
19.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
20.
 
21.
        1 Datei(en) verschoben.
Bei echo ist on
01.
D:\Programme\httpd1\logs>test.bat 
02.
 
03.
D:\Programme\httpd1\logs>set "Log=D:\Programme\httpd1\logs\test.log" 
04.
 
05.
D:\Programme\httpd1\logs>set /a Days=5 
06.
 
07.
D:\Programme\httpd1\logs>set "Src=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\ALogTemp.txt" 
08.
 
09.
D:\Programme\httpd1\logs>set "Dst=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\ALog.txt" 
10.
 
11.
D:\Programme\httpd1\logs>set "GFD=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs" 
12.
 
13.
D:\Programme\httpd1\logs>echo 
14.
ECHO ist eingeschaltet (ON). 
15.
 
16.
D:\Programme\httpd1\logs>sM=",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec":aM=Split(sM,","):aW=Array("","Sun","Mon","Tue","Wed","Thu"," 
17.
Der Befehl "sM" ist entweder falsch geschrieben oder 
18.
konnte nicht gefunden werden. 
19.
 
20.
D:\Programme\httpd1\logs>Fri","Sat")>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 
21.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch. 
22.
 
23.
D:\Programme\httpd1\logs>echo iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else 
24.
iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else 
25.
 
26.
D:\Programme\httpd1\logs>iM=(iM+2)/4 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 
27.
Der Befehl "iM" ist entweder falsch geschrieben oder 
28.
konnte nicht gefunden werden. 
29.
 
30.
D:\Programme\httpd1\logs>echo dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then 
31.
dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then 
32.
 
33.
D:\Programme\httpd1\logs>WScript.Quit(1) 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 
34.
Der Befehl "WScript.Quit" ist entweder falsch geschrieben oder 
35.
konnte nicht gefunden werden. 
36.
 
37.
D:\Programme\httpd1\logs>echo WScript.Echo aW(Weekday(dtD))&" "&aM(Month(dtD))&" "&Right("0"&Day(dtD),2) 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormat 
38.
 
39.
D:\Programme\httpd1\logs>set /p FirstLine= 0<D:\Programme\httpd1\logs\test.log 
40.
 
41.
D:\Programme\httpd1\logs>set FirstLine=[Fri Aug 17 09:01:33 2007] 
42.
 
43.
D:\Programme\httpd1\logs>for /F "tokens=2,3,5 delims=[] " %i in ('echo [Fri Aug 17 09:01:33 2007]') do set "Dat=%i %j %k" 
44.
 
45.
D:\Programme\httpd1\logs>set "Dat=Aug 17 2007" 
46.
 
47.
D:\Programme\httpd1\logs>set /a Days-=1 
48.
 
49.
D:\Programme\httpd1\logs>copy "D:\Programme\httpd1\logs\test.log" "C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\ALog.txt" 1>nul 
50.
 
51.
D:\Programme\httpd1\logs>for /L %d in (0 1 4) do call :RemoveDeltaDayLogEntries %d 
52.
 
53.
D:\Programme\httpd1\logs>call :RemoveDeltaDayLogEntries 0 
54.
 
55.
D:\Programme\httpd1\logs>for /F "delims=" %i in ('cscript //nologo C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 0 Aug 17 2007') do set "Filte 
56.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
57.
 
58.
 
59.
D:\Programme\httpd1\logs>if not defined Filter goto :eof 
60.
 
61.
D:\Programme\httpd1\logs>call :RemoveDeltaDayLogEntries 1 
62.
 
63.
D:\Programme\httpd1\logs>for /F "delims=" %i in ('cscript //nologo C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 1 Aug 17 2007') do set "Filte 
64.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
65.
 
66.
 
67.
D:\Programme\httpd1\logs>if not defined Filter goto :eof 
68.
 
69.
D:\Programme\httpd1\logs>call :RemoveDeltaDayLogEntries 2 
70.
 
71.
D:\Programme\httpd1\logs>for /F "delims=" %i in ('cscript //nologo C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 2 Aug 17 2007') do set "Filte 
72.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
73.
 
74.
 
75.
D:\Programme\httpd1\logs>if not defined Filter goto :eof 
76.
 
77.
D:\Programme\httpd1\logs>call :RemoveDeltaDayLogEntries 3 
78.
 
79.
D:\Programme\httpd1\logs>for /F "delims=" %i in ('cscript //nologo C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 3 Aug 17 2007') do set "Filte 
80.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
81.
 
82.
 
83.
D:\Programme\httpd1\logs>if not defined Filter goto :eof 
84.
 
85.
D:\Programme\httpd1\logs>call :RemoveDeltaDayLogEntries 4 
86.
 
87.
D:\Programme\httpd1\logs>for /F "delims=" %i in ('cscript //nologo C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs 4 Aug 17 2007') do set "Filte 
88.
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\GetFormattedDate.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Typen unverträglich: 'aW' 
89.
 
90.
 
91.
D:\Programme\httpd1\logs>if not defined Filter goto :eof 
92.
 
93.
D:\Programme\httpd1\logs>move "C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\2\ALog.txt" "D:\Programme\httpd1\logs\test.log" 
94.
        1 Datei(en) verschoben. 
95.
 
96.
D:\Programme\httpd1\logs>goto :eof
Hat das überhaupt mit dem ECHO zu tun ?
Bitte warten ..
Mitglied: IT-MaD
31.10.2007 um 11:51 Uhr
super ... vielen Dank ... so scheint es wirklich zu funktionieren ... aber ich teste nochmal ein wenig rum
Bitte warten ..
Mitglied: bastla
31.10.2007 um 12:05 Uhr
Hallo Franzmann!

Du scheinst überzählige Zeilenumbrüche (zB in der Zeile "echo sM=",Jan,Feb ...." gleich nach dem "echo") in der Datei zu haben ...

Vielleicht kurz zur Funktionsweise: die "echo"-Zeilen ab der oben Beschriebenen bis zu "echo WScript.Echo aW(Weekday ..." erstellen ein VBScript (die Berechnung/Formatierung der Datumsangaben inkl der Wochentage lässt sich so einfacher realisieren als in Batch) in "%temp%\GetFormattedDate.vbs", daher müssen die jeweiligen Zeilen (ohne Umbrüche) intakt bleiben.

Ein "echo on" schadet dabei allerdings nicht ...

Grüße
bastla
Bitte warten ..
Mitglied: Franzmann
31.10.2007 um 12:10 Uhr
Hallo Franzmann!

Du scheinst überzählige
Zeilenumbrüche (zB in der Zeile
"echo sM=",Jan,Feb ...."
gleich nach dem "echo") in der
Datei zu haben ...

Ja, womit du das Problem gefixt hast ;)
Es läuft ! Super vielen Dank.
Die Logfile ist gleich viel kleiner geworden.
Von ca. 300MB auf ca.1MB
Bitte warten ..
Mitglied: IRIXuser
31.10.2007 um 16:39 Uhr
hallo,

ich bin sehr froh das es bei euch funkt.
würde das gern für ein windowssystem mit apache übernehmen. aber irgendwie habe ich den anschluss verloren.

wie habt ihr das format geändert, so dass am anfang einer zeile [Wed Sep 12 10:11:51 2006] steht.

ich habe versucht die config zu ändern, aber dann startet apache nicht mehr [lol]!

ist die zeile so richtig?
%{"%YYYY%%mm%dd%HH:%MM:%SS"}t

bei mir steht:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

kann mir einer von euch bitte mal die editierte zeilen zeigen???

thx
patric
Bitte warten ..
Mitglied: IT-MaD
31.10.2007 um 17:13 Uhr
also ich habe nix an dem Format geändert ... und soweit ich weiß Franzmann auch nicht und da bin ich mir eigentlich sicher ...
Bitte warten ..
Mitglied: bastla
31.10.2007 um 17:23 Uhr
Hallo IRIXuser!

Wie sieht denn bei Dir eine Zeile der Logdatei aus?

Grüße
bastla
Bitte warten ..
Mitglied: IRIXuser
31.10.2007 um 17:34 Uhr
hier ist die ausgabe meiner datei:

C:\Dokumente und Einstellungen\Administrator\Desktop>set "Log=E:\access.log"

C:\Dokumente und Einstellungen\Administrator\Desktop>set "Days=6"

C:\Dokumente und Einstellungen\Administrator\Desktop>set "Src=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ALogTemp.txt"

C:\Dokumente und Einstellungen\Administrator\Desktop>set "Dst=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ALog.txt"

C:\Dokumente und Einstellungen\Administrator\Desktop>set "GFD=C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\GetFormattedDate.vbs"

C:\Dokumente und Einstellungen\Administrator\Desktop>echo sM=",Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec":aM=Split(sM,","):aW=Array("","Sun","Mon","Tue","Wed","Thu","Fri","Sat") 1>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\GetFormattedDate.vbs

C:\Dokumente und Einstellungen\Administrator\Desktop>echo iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(1)):If iM=0 Then WScript.Quit(1) Else iM=(iM+2)/4 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\GetFormattedDate.vbs

C:\Dokumente und Einstellungen\Administrator\Desktop>echo dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(2)-iDDiff):If Not IsDate(dtD) Then WScript.Quit(1) 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\GetFormattedDate.vbs

C:\Dokumente und Einstellungen\Administrator\Desktop>echo WScript.Echo aW(Weekday(dtD))&" "&aM(Month(dtD))&" "&Right("0"&Day(dtD),2) 1>>C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\GetFormattedDate.vbs

C:\Dokumente und Einstellungen\Administrator\Desktop>set /p FirstLine= 0<"E:\access.log"

C:\Dokumente und Einstellungen\Administrator\Desktop>for /f "tokens=2,3,5 delims=[] " %i in ('echo [Thu Sep 20 21:50:22 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8e mod_autoindex_color PHP/5.2.3 configured -- resuming normal operations') do set "Dat=%i %j %k"


ich bekomme keine fehlermeldung aber die access.log wird nicht kleiner....
Bitte warten ..
Mitglied: bastla
31.10.2007, aktualisiert 18.10.2012
Hallo IRIXuser!

Soferne ich das richtig sehe, verwendest Du aber nicht die um 11:30:09 Uhr gepostete Version?

Grüße
bastla
Bitte warten ..
Mitglied: IRIXuser
01.11.2007 um 06:58 Uhr
hi,
ja du hast recht. ich hatte wohl die falsche version benutzt.
jetzt habe ich mir das mal genau angesehen und ich habe einige fragen zu dem script.

in der ersten echo zeile die variablen sM und aW .

ich benutze apache 2 und bei mir steht im ersten feld nicht [Wed... sondern [10....
für den Monat. also ein numerischer eintrag.
hier ein auszug der ersten zeile meines logfiles

[31/Okt/2007:18:04:41 +0100] - username IP ...........

ich habe die seite, welche du gelinkt hast gelesen (apacheweek) und danach meinen
%t eintrag nach vorn geholt. aber ich habe das gefühl das es so nicht mit deinem script übereinstimmt. mein script heisst clear.bat und wenn ich clear.bat > out.out umleite und mir das anschaue, sieht es ganz gut aus. keine fehler. aber die datei ist immer noch so wie zuvor.
wie muss ich das script von dir anpassen??? evtl in GetFormattedDate.vbs ???

dann habe ich nochmal eine allgemeine frage zu dem script.
du rufst in einer for schleife :RemoveDeltaDayLogEntries auf.
und weiter unten steht wieder :RemoveDeltaDayLogEntries
ist das eine funktion, die du dort aufrufst?
mir kommt das so ein bisschen C ähnlich vor (abgesehen von der syntax)

patric
Bitte warten ..
Mitglied: bastla
01.11.2007 um 10:17 Uhr
Hallo IRIXuser!

Du kannst das Format für die Datumsangabe unverändert lassen - ich habe das Script entsprechend angepasst an
01.
[31/Okt/2007:18:04:41 +0100] - username IP ...........
Sollte tatsächlich, wie Du vorher schreibst, das Datum mit dem Monat, also 10, beginnen, müsstest Du eine Logzeile in diesem Format posten.
01.
@echo off & setlocal 
02.
set "Log=E:\access.log" 
03.
set /a Days=7 
04.
 
05.
set "Src=%temp%\ALogTemp.txt" 
06.
set "Dst=%temp%\ALog.txt" 
07.
set "GFD=%temp%\GetFormattedDate.vbs" 
08.
echo sM=",Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez":aM=Split(sM,",")>%GFD% 
09.
echo iDDiff=-WScript.Arguments(0):iM=InStr(sM,WScript.Arguments(2)):If iM=0 Then WScript.Quit(1) Else iM=(iM+2)/4>>%GFD% 
10.
echo dtD=DateSerial(WScript.Arguments(3),iM,WScript.Arguments(1)-iDDiff):If Not IsDate(dtD) Then WScript.Quit(1)>>%GFD% 
11.
echo WScript.Echo Right("0"^&Day(dtD),2)^&"/"^&aM(Month(dtD))^&"/"^&Year(dtD)>>%GFD% 
12.
set /p FirstLine=<%Log% 
13.
set FirstLine=%FirstLine:~1,11% 
14.
for /f "tokens=1-3 delims=/" %%i in ('echo %FirstLine%') do set "Dat=%%i %%j %%k" 
15.
set /a Days-=1 
16.
 
17.
copy "%Log%" "%Dst%">nul 
18.
for /l %%d in (0,1,%Days%) do call :RemoveDeltaDayLogEntries %%d 
19.
move "%Dst%" "%Log%" 
20.
goto :eof 
21.
 
22.
:RemoveDeltaDayLogEntries 
23.
for /f "delims=" %%i in ('cscript //nologo %GFD% %1 %Dat%') do set "Filter=%%i" 
24.
if not defined Filter goto :eof 
25.
echo Entferne Zeilen mit Datum: %Filter% 
26.
move "%Dst%" "%Src%" 
27.
findstr /v /b "[%Filter%" "%Src%" > "%Dst%"
du rufst in einer for schleife :RemoveDeltaDayLogEntries auf.
und weiter unten steht wieder :RemoveDeltaDayLogEntries
ist das eine funktion, die du dort aufrufst?
Eigentlich eine Prozedur (Unterprogramm) - der Aufruf erfolgt aus einer Zählschleife (von 0 bis Days-1), welche die Tagesdifferenz zum in der ersten Zeile gefundenen Datum (Basisdatum) übergibt.

In der aufgerufenen Prozedur wird diese Differenz samt dem Basisdatum dem oben erstellten VBScript übergeben, welches als Rückgabewert einen formatierten Datumsstring für (Basisdatum + %%d Tage) liefert.

Dieser String wird letztlich als Suchkriterium für die zu löschenden (genauer: auszufilternden, daher "findstr /v") Zeilen verwendet (Zeile muss mit [Datumsstring beginnen - daher "findstr /b").

Gelöscht wird also jeweils nur ein Tag, daher die Verwendung der beiden temporären Dateien %Src% und %Dst% zum Zwischenspeichern des gekürzten Logs (und das "move" des vorigen Ergebnisses %Dst% in die neue Ausgangsdatei %Src%).

ich habe die seite, welche du gelinkt hast gelesen (apacheweek) ...
Damit Du mich nicht mit fremden Federn schmückst: Den Link hat Biber gefunden ...

Die Idee, die wir tatsächlich beide hatten: Eine rein numerische Datumsschreibweise "YYYYMMDD" ließe sich in Batch leichter weiter verarbeiten, als dies mit der Variante "Monat als Abkürzung" oder (eigentlich noch schlimmer) "vorangestelltem abgekürzten Wochentag" möglich ist - deswegen auch die Verwendung des VBScripts.

Grüße
bastla
Bitte warten ..
Mitglied: IRIXuser
01.11.2007 um 15:17 Uhr
hi bastla,
super ding! jetzt wird das format erkannt. ganz schön abstrakt die sprache.
irgendwie ist mir shell scripting lieber...

dann noch mal vielen dank für deine mühe...

gruß
Patric
Bitte warten ..
Mitglied: bastla
01.11.2007 um 16:36 Uhr
Hallo IRIXuser!

ganz schön abstrakt die sprache.
Sieht schlimmer aus, als es wirklich ist - speziell das VBScript habe ich halt stark "eingedampft" ...

Vielleicht wird das Script so etwas leichter zu durchschauen:
01.
sM = ",Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez" 'verwendete Monatsnamen 
02.
'Aufteilung der Namen (in ein Array; eigentlich nullbasiert, 
03.
'    aber durch das erste Komma oben stimmen Name und Monatszahl überein) 
04.
aM = Split(sM, ",") 
05.
 
06.
'Erstes übergebenes Argument (ebenfalls nullbasiert) ist die Tagedifferenz  
07.
'    (das "-" ist syntaktisch bedingt - siehe unten) 
08.
iDDiff = -WScript.Arguments(0) 
09.
 
10.
'Monatsnummer als Integer ermitteln - Schritt 1: Position im String sM feststellen 
11.
iM = InStr(sM, WScript.Arguments(2)) 
12.
If iM = 0 Then 'Monatsname gefunden? 
13.
	'Nein, daher Ende (mit Errorlevel 1 - wird zwar nicht weiter verwendet, 
14.
	'    schadet aber auch nicht) 
15.
	WScript.Quit(1) 
16.
Else 
17.
	'Monatsnummer als Integer ermitteln - Schritt 2: aus Position im String Monatszahl ermitteln 
18.
	iM = (iM + 2) / 4 
19.
End If 
20.
 
21.
'Datum aus iM und den weiteren Argumenten zusammenstellen - Jahr, Monat, Tag; 
22.
'    dabei auch gleich Tagedifferenz berücksichtigen -  
23.
'    hier wird ein negativer Wert benötigt, daher oben der Vorzeichenwechsel 
24.
dtD = DateSerial(WScript.Arguments(3), iM, WScript.Arguments(1)- iDDiff) 
25.
 
26.
 'Falls kein gültiges Datum entstanden ist, mit Fehler beenden 
27.
If Not IsDate(dtD) Then WScript.Quit(1) 
28.
 
29.
'Datum formatiert ausgeben: Tag mit führender 0, Monat als Text 
30.
WScript.Echo _ 
31.
	Right("0" & Day(dtD), 2) & "/" & _ 
32.
	aM(Month(dtD)) & "/" & _ 
33.
	Year(dtD)
Ein Auge solltest Du noch auf die Monatsnamen haben (zB ob "Jan" - in der jetzigen Version - oder "Jän"); das kannst Du dann gegebenen Falls aber sicher auch in der "Kurzfassung" oben selbst anpassen ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
01.11.2007 um 19:00 Uhr
Hmmm,

das Thema "eigenes LogFile-Format setzen" ist irgendwie noch nicht durch für mich...

Muss ja nicht sein, dass ein begnadeter bastla für jedes irgendwo scheinbar zufällig vom Himmel fallende Logfile-Datumsformat eine eigene kleine Routine schreibt.
Auch wenn er im Routinen schreiben durchaus routiniert ist.

Deshalb noch mal zu der meiner oben zusammenphantasierten NICHT funktionierenden Behauptung:
....was bedeuten könnte, mit einem (sinngemäß/ungetestet!) Befehl
LogFormat %{"%YY-%mm-%dd %HH:%MM:%SS")t {und der Rest der Zeile nach Belieben}
-oder-
LogFormat %{"%YYYY%%mm%dd %HH:%MM:%SS")t

---> nicht ganz, vermutlich ist die Syntax eher so, dass mit...
01.
Logformat "%{%Y%m%d %H:%M %S}t [...weitere definierte %-Vars..] " NameDesLogformats
...so eine Logzeile definiert wird.

@IRIXuser
Deshalb wäre für das Verstehen der Syntax der Logformat-Direktive ganz interessant, was bei Dir in der httpd.conf drinsteht an "Logformat"-Zeilen.
Denn Dein Datumsformat unterscheidet sich ja schon von Franzmanns....

Grüße
Biber


Deshalb
Bitte warten ..
Mitglied: IRIXuser
02.11.2007 um 10:39 Uhr
hallo,

@bastla
danke für die erleuterung des scripts, es ist jetzt nicht mehr so abstrakt wie zuvor.
und - was ich gestern schon erwähnen wollte, schmücken wollte ich niemanden' wollte nur andeuten, dass ich mich mit der thematik auseinander gesetzt habe, was auch dazu führte, dass ich jetzt an Biber schreiben kann:

@Biber
auf der seite apacheweek (common format) habe ich gesehen, dass die fomatierung in der form
%h %l %u %t "%r" %>s %b
in der config steht. um meine datei nun anzupassen, habe ich einfach das %t nach vorn gezogen
und meine zeile in der config sieht nun so aus:
LogFormat "%t %l %u %h \"%r\" %>s %b" common
mehr nicht!

die von euch vorgeschlagene formatierung :
Logformat "%{%Y%m%d %H:%M %S}t [...weitere definierte %-Vars..] " NameDesLogformats
habe ich nicht benutzt.

der grund warum sich die formatierung zu der config von franzmann unterscheidet, kann ich nur damit erklären, dass sich evtl. die version von apache unterscheidet.
ich benutze den apachen 2.2.4 .

da ich windows nur für CAD und Flash benutze, und zufällig gerade einen webserver auf windows aufgesetzt hatte, war ich schon interessiert, wie sich das thema mit dem logfile entwickelt.
aber es macht spass mit leuten wie euch "erfahrungen" auszutauschen.....

schade das der beitrag nun zum ende kommt....


grüße aus hannover
patric
Bitte warten ..
Mitglied: Franzmann
02.11.2007 um 19:58 Uhr
aber es macht spass mit leuten wie euch
"erfahrungen" auszutauschen.....
Absolut. Danke nochmal an alle die diesen Thread zu so einem erfolgreichen Ende gebracht haben.

schade das der beitrag nun zum ende
kommt....
Naja es gibt schlimmeres :D
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Apache Server
gelöst Rootlink im Apache Logfile (6)

Frage von Henere zum Thema Apache Server ...

Batch & Shell
gelöst Dateien mit vorgegebener Größe erstellbar? (3)

Frage von Stefan007 zum Thema Batch & Shell ...

Exchange Server
Maximale Größe für empfangene Nachricht (5)

Frage von HeinrichM zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...