Utilizzare file di log Apache separati per multisite WordPress

6 apr 2012, 03:36:39
Visualizzazioni: 1.48K
Voti: 3

Tempo fa ho abbandonato Blogger e ho trasferito i miei blog sul mio sistema. Li ho ospitati lì con ogni singolo blog come VirtualHost per un po'. Successivamente, li ho importati in WordPress e ora li ospito da WP.

Quando li ospitavo localmente come virtual host, ogni blog utilizzava un file di log Apache separato, ma ora tutti i blog vengono registrati nello stesso file.

Non riesco a trovare un'impostazione in WordPress, e non c'è modo di specificarlo in un file .htaccess poiché i siti sono virtuali. Cioè, i blog WordPress non si trovano effettivamente sul disco come directory separate (inoltre, le impostazioni di log non possono essere utilizzate in .htaccess comunque).

Come può essere configurata un'installazione WordPress multisito in modo che uno o più siti registrino i propri accessi in un file di log separato?

Il secondo suggerimento di toscho sull'uso di SetEnvIf è promettente. Sono riuscito a far sì che gli accessi a un sito vengano registrati in un file di log separato e esclusi dal log principale utilizzando le direttive seguenti.

…
<IfModule log_config_module>
  …
  # Riutilizzo la variabile d'ambiente dontlog perché non c'è motivo di creare una variabile speciale (per me), quindi evita di dover usare un'espressione (inoltre, ha semplicemente senso)
  SetEnvIf Request_URI "^/blogs"        dontlog
  SetEnvIf Request_URI "^/blogs/blog1"  blog1
  SetEnvIf Request_URI "^/blogs/foobar" foobar
  …
  CustomLog "../Logs/Main/access.log"  common env=!dontlog
  CustomLog "../Logs/Blogs/blog1.log"  common env=blog1
  CustomLog "../Logs/Blogs/foobar.log" common env=foobar
  …
  UnsetEnv  dontlog
  UnsetEnv  blog1
  UnsetEnv  foobar
</IfModule>
…

Questo funziona per un blog single-site, ma per il multisito, il problema è cercare di mantenere le cose ordinate e semplificare l'aggiunta di nuovi blog perché sembra che non sia possibile utilizzare variabili nei nomi dei file di log come segue, il che significa dover creare una voce separata per ognuno:

…
<IfModule log_config_module>
  …
  SetEnvIf Request_URI "^/blogs"         dontlog
  # Imposta la variabile d'ambiente con la sottoespressione regex corrispondente al nome del blog
  SetEnvIf Request_URI "^/blogs(.+/)"    blog=$1
  …
  CustomLog "../Logs/Main/access.log"    common env=!dontlog
  CustomLog "../Logs/Blogs/%{blog}e.log" common env=blog
  …
  UnsetEnv  dontlog
  UnsetEnv  blog
</IfModule>
…

Alla fine ottengo un log contenente tutti gli accessi ai blog in un file denominato %{blog}e.log.

0
Tutte le risposte alla domanda 1
5

Puoi configurare log personalizzati nel tuo file httpd-vhosts.conf in base alla variabile HTTP_HOST – se il tuo server è Apache e utilizzi sottodomini per ogni singolo sito.

Per sottodirectory (non testato):

SetEnvIf Request_URI ^sitename1 sitename1
SetEnvIf Request_URI ^sitename2 sitename2
CustomLog sitename1.log common env=sitename1
CustomLog sitename2.log common env=sitename2
6 apr 2012 04:05:04
Commenti

Come ho detto, è quello che facevo prima di passare a WordPress. Ora non funzionerà perché i siti in wpmu non esistono come cartelle su disco o come host virtuali in Apache: blah.com/blogs/foo, blah.com/blogs/bar.

Synetech Synetech
6 apr 2012 04:08:18

Ho aggiunto un esempio per le sottodirectory. Non testato, solo un'idea.

fuxia fuxia
6 apr 2012 04:16:06

Mmm, capisco cosa stai facendo. Proverò.

Synetech Synetech
6 apr 2012 04:17:54

@Synetech Ha funzionato?

fuxia fuxia
6 ott 2012 22:17:48

No, non ha funzionato; i log erano vuoti. Sto testando per vedere se usare la direttiva <If> può aiutare, ma richiede l'aggiornamento alla versione 2.3+.

Synetech Synetech
13 ott 2012 18:41:48