5

I have about 10 VirtualHosts and I like to keep the error_logs separated. Recently, I need to also have the error_logs all combined for some mod_security scanning.

If I define 2 ErrorLogs for a test VirtualDomain, I notice that no error's are being logged. Pretty strange.

Is it possible to have a CustomLog play the role of an ErrorLog?

Or am I defining my 2 ErrorLogs incorrectly?

<VirtualHost 1.2.3.4:80>
    ServerName mydomain.net
    ServerAlias www.mydomain.net mydomain.net
    DocumentRoot /var/www/html/mydomain
    ServerAdmin not@available.com
    UseCanonicalName Off

    ErrorLog logs/mydomain.net-error_log
    ErrorLog logs/unified_modsecurity-error_log

    CustomLog logs/mydomain.net-access_log combined
    UserDir disabled
    UserDir enabled mydomainuser
</VirtualHost>
Pat
  • 274
  • 3
  • 14

2 Answers2

7

No, it is not possible to have two ErrorLog directives per VirtualHost. However, you could use Apache's ability to pipe to a command in order to log to two (or more) files using the UNIX 'tee' command:

ErrorLog "|/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log"

diz
  • 189
  • 4
  • I will try this. If I were to do `ErrorLog "|/usr/bin/tee -a /var/log/httpd/mydomain.net-error_log /var/log/httpd/unified_modsecurity-error_log"`, will the logs still roll over like how they do today? – Pat Sep 06 '13 at 00:49
  • 1
    *facepalm* logrotate should take care of the rotations. I'll give your solution a try, thanks! – Pat Sep 06 '13 at 02:16
  • Works like a charm! – Ron Jan 22 '19 at 15:42
  • I works also for access log. You can add combined at the end, after double quotes. – jobima Feb 07 '19 at 15:02
3

According to the Apache 2.4 Logs documentation:

By default the piped log process is spawned without invoking a shell. Use "|$" instead of "|" to spawn using a shell (usually with /bin/sh -c):

This was the default behaviour for Apache 2.2.

Example:

# Write to files error-1.log and error-2.log, and echo to stdout
CustomLog "|$/usr/bin/tee -a /var/log/apache/error-1.log /var/log/apache/error-2.log"

Another issue I ran into:

  • You should not have a space between the Double-Quote and Bar.
    • "|$ ... is valid.
    • " |$ ... is not.