Введение:
Я пытаюсь получить дополнительные поля для входа в log4j и его работу, но только тогда, когда я создаю приложение в коде, а не в log4j.properties
Прогресс:
- Использовал эту статью Добавление символов преобразования в PatternLayout для log4j 1.1.3
- Сделано пример приложения для log4j 1.2
Проблема:
используя файл свойств, который будет запущен, но не будет использовать AppServerPatternLayout, чтобы пользовательские поля не отображались.
Код загрузки
customlog.properties
log4j.rootLogger=FATAL
log4j.logger.some.log=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=logging.AppServerPatternLayout
log4j.appender.stdout.layout.ConversionPattern=-----------------using log file------------------------%nTime: %d%nHost: %h%nServer: %s%nComponent: %b%nVersion: %v%nPriority: %p%nThread Id: %t%nContext: %x%nMessage: %m%n
Запись в Main.java без файла свойств log4j
AppServerLoggerFactory factory;
factory = new AppServerLoggerFactory("MyServer", "MyComponent", "1.0");
AppServerLogger.setFactory(factory);
Logger logger = AppServerLogger.getLogger("some.log");
PatternLayout layout = new AppServerPatternLayout( formatString );
logger.addAppender( new ConsoleAppender(layout) );
logger.info("Hello");
Запись в Main.java с файлом свойств log4j
PropertyConfigurator.configure("customlog.properties");
AppServerLoggerFactory factory;
factory = new AppServerLoggerFactory("MyServer", "MyComponent", "1.0");
AppServerLogger.setFactory(factory);
Logger logger = AppServerLogger.getLogger("some.log");
logger.info("Hello");
Ожидаемый результат
----------------using in code appender----------------------
Time: 2009-11-06 12:55:05,785
Host: M1330
Server: MyServer
Component: MyComponent
Version: 1.0
Priority: INFO
Thread Id: main
Context:
Message: logging config from code
Фактический выход
-----------------using log file------------------------
Time: 2009-11-06 12:56:17,983
Host:
Server:
Component:
Version:
Priority: INFO
Thread Id: main
Context:
Message: logging config from customlog.properties
Решение
Используя MDC, вы можете добавить настраиваемые поля, например
MDC.put("Version", versionName);
Logger log = LogManager.getLogger("some.log");
log.info("Hello");
и вытащите его в файле log4j.properties с ВЕРХНИЙ случай X
log4j.appender.stdout.layout.ConversionPattern=%X{Version}