Uso de archivos de registro separados de Apache para multisitio

6 abr 2012, 03:36:39
Vistas: 1.48K
Votos: 3

Hace un tiempo dejé Blogger y descargué mis blogs a mi sistema. Los alojé allí con cada blog individual como un VirtualHost por un tiempo. Más tarde, los importé a WordPress y ahora los alojo desde WP.

Cuando los alojaba localmente como hosts virtuales, cada uno usaba un archivo de registro de Apache separado, pero ahora todos los blogs se registran en el mismo archivo.

No puedo encontrar una configuración en WordPress, y no hay forma de especificarlo en un archivo .htaccess ya que los sitios son virtuales. Es decir, los blogs de WordPress no están ubicados realmente en el disco como directorios separados (además, las configuraciones de registro no se pueden usar en .htaccess de todos modos).

¿Cómo se puede configurar una instalación multisitio de WordPress para que uno o más sitios registren en su propio archivo de registro?

La segunda sugerencia de toscho de usar SetEnvIf es prometedora. Logré que el acceso a un sitio se registrara en un archivo separado y se excluyera del registro principal usando las directivas a continuación.

…
<IfModule log_config_module>
  …
  # Reutilizo la variable de entorno dontlog porque no hay razón para crear una variable especial (para mí), así que evita tener que usar una expresión (además, tiene sentido)
  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>
…

Esto funciona para un blog de un solo sitio, pero para multisitio, el problema es intentar mantener las cosas organizadas y simplificar la adición de nuevos blogs porque parece que no es posible usar variables en nombres de archivos de registro como se muestra a continuación, lo que significa hacer una entrada separada para cada uno:

…
<IfModule log_config_module>
  …
  SetEnvIf Request_URI "^/blogs"         dontlog
  # Establecer variable de entorno para la subexpresión regex coincidente correspondiente al nombre 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>
…

Termino con un registro que contiene todo el acceso a los blogs en un archivo llamado %{blog}e.log.

0
Todas las respuestas a la pregunta 1
5

Podrías configurar registros personalizados en tu httpd-vhosts.conf dependiendo de la variable HTTP_HOST – si tu servidor es Apache y usas subdominios para cada sitio individual.

Para subdirectorios (no probado):

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

Como dije, eso es lo que hice antes de mudarme a WordPress. Eso no funcionará ahora porque los sitios en wpmu no existen como carpetas en el disco o como hosts virtuales en Apache: blah.com/blogs/foo, blah.com/blogs/bar.

Synetech Synetech
6 abr 2012 04:08:18

He añadido un ejemplo para subdirectorios. No está probado, solo es una idea.

fuxia fuxia
6 abr 2012 04:16:06

Hmm, ya veo lo que estás haciendo. Lo probaré.

Synetech Synetech
6 abr 2012 04:17:54

@Synetech ¿Funcionó?

fuxia fuxia
6 oct 2012 22:17:48

No, no funcionó; los registros estaban vacíos. Estoy probando a ver si usar la directiva <If> puede ayudar, pero requiere actualizar a la versión 2.3+.

Synetech Synetech
13 oct 2012 18:41:48