Boost.Log: nombre del archivo de soporte y número de línea

Estoy tratando de alejar a mi equipo delog4cxx e intenta usarBoost.Log v2 en lugar. Nuestra corrientepatrón log4cxx es bastante simple:

log4cxx::helpers::Properties prop;
prop.setProperty("log4j.rootLogger","DEBUG, A1");
prop.setProperty("log4j.appender.A1","org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.A1.layout","org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.A1.layout.ConversionPattern","%d{ABSOLUTE} %-5p [%c] %m%n");
log4cxx::PropertyConfigurator::configure(prop);

Sin embargo, no pude encontrar una solución para admitir la impresión de nombre de archivo y número de línea. He encontrado hasta ahora unpublicación antigua, pero no hay una solución clara (ninguna solución aceptada). He investigado el uso de esosBOOST_LOG_NAMED_SCOPE pero se sienten muy feos ya que hace que sea imposible imprimir el número de línea adecuado cuando se usan múltiples de esos dentro de la misma función.

También he encontrado una solución directa más simple,aquí. Pero eso también se siente feo, ya que imprimirá la ruta completa, en lugar de solo el nombre base (no es configurable). Por lo tanto, la ruta completa y el número de línea siempre se imprimen en una ubicación fija (antesexpr::smessage)

También encontré estoenviar, que parece una vieja solución.

Y finalmente la solución más prometedora que encontré fueaquí. Sin embargo, ni siquiera se compila para mí.

Entonces, mi pregunta es simple: ¿cómo puedo usar Boost.Log v2 para imprimir el nombre de archivo (no la ruta completa) y el número de línea con un mínimoflexibilidad del formateador (sin solución conMACRO y__FILE__ / __LINE__ aceptado, por favor). Agradecería una solución que no impliqueBOOST_LOG_NAMED_SCOPE, tal como se describeaquí:

Si, en cambio, desea ver números de línea de registros de registros particulares, entonces la mejor manera es definir una macro personalizada que usará para escribir registros. En esa macro, puede agregar el nombre del archivo y el número de línea como atributos al registro (puede usar manipuladores para eso). Tenga en cuenta que en este caso no podrá usar estos atributos en los filtros, pero probablemente no lo necesite.

Respuestas a la pregunta(2)

Su respuesta a la pregunta