Хотя вы спрашиваете об имени файла, я думаю, что вы можете использовать % type , чтобы получить полное имя типа (a.b.className). Если вы просто хотите указать имя класса, используйте % type {1}
Обратите внимание, что любой метод, который генерирует информацию о вызывающем абоненте (% file и% type), связан с производительностью.
Кроме того, вы можете обойти производительность, назвав Logger именем типа.
namespace MyNamespace
{
public class Foo
{
private static ILog log = LogManager.GetLogger(typeof(Foo));
}
}
Ваш шаблон конвертации будет выглядеть так:
"%date [%thread] %-5level %logger %message"
Где ваш регистратор будет " MyNameSpace.Foo ". Аналогично, если вам нужно только имя класса, используйте "% logger {1} , который будет преобразован в" Foo".
Одним из лучших преимуществ этого подхода является то, что вы можете использовать иерархическую систему хранилищ log4net для настройки уровней ведения журнала для каждого типа:
<!-- all classes in MyNamespace are warn -->
<logger name="MyNamespace">
<level value="WARN" />
</logger>
<!-- only Foo is in debug -->
<logger name="MyNamespace.Foo">
<level value="DEBUG" />
</logger>