First off let me say a big thank you to all those who have downloaded and deployed L4DStats - I think its safe to say that one of biggest rewards when writing and releasing free software is to see people using it!
Secondly but no less important I would like to take a moment to thank all the people who have emailed in suggestions, bug notifications and general notes of thanks!
Bugs
PHP Processer: The PHP processer (process_logs.php) doesn’t move files to ./old/
Credit - Multiple
Flash Graphs: When there is no data in the DB the Flash graphs cause infinite loops
Credit - Multiple
BloodHarvest VS Map Name: - FormatMapNames() didn’t have an entry for the BloodHarvest series of Versus maps.
Credit - Dateranoth
Feature Improvements
MOTD Page: A cut down version of the default front page to be used as a MOTD on the server itself
Credit to Reali
AI Kills:Ability to not display AI kills (i.e only show stats for real human players)
Credit - Multiple
If there are any other bugs let me know, I’ll also be adding an ‘Improvement Cloud’ to this site which will work in the same way as a Tag cloud but for user suggested improvements / additions to L4DStats.




First of all thx for all your effort and this very much appreciated app.
I’ve got a question though: My server seems to only produce logs ending with “_000.log” your php-script has “_001.log” hardcoded in it. As your looping through the directory anyway, why not store the filenames in an array and then take the files from there?
The hardcoded way the script tries to open files that are not there and produces warnings.
Or is my server setup wrong and I should be concerned about the names of my logfiles?
Hi Sandman,
If sv_log_onefile is set to 0 then the _000.log is usually the ’setup’ log and _001.log is the Statistics log.
If _000.log is generated just before the minute switches over (HH:MM:59) then the statistics log (_001.log) will be generated as the next minute _000.log.
Do you get more informational warnings when using the .NET executables?
Can you email a collection of the logs to gareth _AT_ networksaremadeofstring dot co dot uk?
Thanks
Gareth
Hi,
I have a problem when I use the .NET executable. When I use it, I have not the name of players (only their SteamID). The “PlayerName” column is empty.
This problem does not appear when I use the PHP script
Just an idea : Is it possible to add in your .NET application the possiblity to download log files on FTP and push-it at the same time by XMLRPC.
Good job
Hi Popcorn,
I’m not sure how that’s happening, the only thing I can think of is that the names are using a strange extended character set I haven’t anticipated.
I’ve sent you an email requesting further info and log file examples.
Gareth
Hi.
Thanks for your swift reply.
My server produces 2 kinds of logfiles: 1. Files without the ip-address and port filled in (e.g. L000-000-000-000-0-…), 2. those with ip-address and port filled in.
From what I get about your setup and statistics logfiles I would expect those without ip-address-information to be “my” setup-logs.
This would explain why my statistics logfiles start with _000.log and not _001.log.
The reason, I think, is that I use srcds fork option to run multiple servers. Any thoughts on that? I’ ll get some sample logs on the way to you when I have access to the server again, some time tomorrow.
As distinguishing logs is possible on contents I would suggest to stop filtering based on filenames alltogether.
By the way I think the headshot statistic is not being updated in the php-script in version 0.3 - you can check on that in the site I linked.
Using the mono executable does not work for me. It does not do anything except telling me to append a slash at the end of the path argument. Altough I already am doing that. So I was using a shell script to copy, chmod, import and archive the logfiles. Import is by executing a wget on the php-script (quick and dirty approach, I know).
Ttfn,
Michael
I use forked servers too, some have 000 and some do not.
Also i need to set a cron entry, but if i run the process logs again and again, it just adds the same data, so it needs to run only when the logs are “turned” by the server. So what time interval should that be?
As most people dont have mod rewrite installed i would leave this as default turned off though. But thats just my thoughts..
For the rest it seems nice and everything, great work.
If your using a cronjob to process the logfiles, why don’ t you just move the previously processed logs somewhere else just before processing the next time?
I think it is a known problem for the php-script that old logs are not getting moved by the script itself.
Sandman is indeed correct, it is a noted problem with the PHP script that will be fixed for the next version.
The following shell script should help in the mean time.
#!/bin/bash
php /web/dir/l4dstats/processlogs.php
mv /web/dir/l4dstats/logs/*.log /web/dir/l4dstats/logs/old/
Sorry for mistake in the first place everyone.
Just downloaded the motd.php from svn and I must say it works great. Had to add $GameCount = 10; but other than that it works like a charm and looks great for a MOTD when joining my server. Thanks for all the hard work!