
Los archivos de la unidad systemd para mis aplicaciones Java (en Ubuntu 18.04) parecen estar funcionando: había configurado stdout y stderr para que se enviaran a syslog y las entradas del registro aparecían en /var/log/syslog.
Sin embargo, quiero usar nombres dinámicos, por eso agregué /etc/rsyslog.d/10-myapp.conf que contiene:
$CreateDirs on
:programname, startswith, "myapp-" {
/var/log/apps/$programname.log
stop
}
Luego reinicié rsyslog... y obtuve un archivo llamado $programname.log en el directorio.
Sospecho que puede haber un problema con la forma en que especifiqué el nombre del archivo dinámico; veo en otros lugares personas que usan unsintaxis diferente para seleccionarel mensaje junto con %...% alrededor del nombre de la variable. Sin embargo, intentar lo siguiente (y reiniciar rsyslog) no ayudó:
:programname, startswith, "myapp-" {
"/var/log/apps/%programname%.log"
stop
}
Eso me dio un archivo llamado %programname%.log
Respuesta1
Para utilizar nombres de archivos dinámicos, debe utilizar una plantilla. Esto nombra la cadena (generalmente DynFile
en ejemplos) e interpolará los %property%
valores en la cadena cuando se use. Para utilizar la plantilla en la sintaxis heredada, debe anteponerle el prefijo ?
.Intente
$template DynFile,"/var/log/apps/%programname%.log"
:programname, startswith, "myapp-" {
?DynFile
stop
}
La sintaxis no heredada es un poco más explícita y, en ocasiones, puede ser más legible. En realidad estás usando el incorporadoarchivo ommódulo. Tener cuidado,plantillastienen 2 usos diferentes: como nombres de archivos dinámicos y como formato para escribir los datos. Sin embargo, para cadenas simples, se definen de la misma manera, por ejemplo:
template(name="myfile" type="string"
string="/var/log/apps/%programname%.log")
if ($programname startswith "myapp-") then {
action(type="omfile" dynaFile="myfile")
stop
}
Las palabras clave como dynaFile
deben escribirse exactamente. Tenga en cuenta que action()
tiene una template=...
opción de palabra clave. Esto es para proporcionar una plantilla para los datos escritos en el archivo.