2015-09-18 1 views
0

J'ai créé un fichier log4j assez standard, je voudrais charger et utiliser les propriétés de celui-ci, en le plaçant dans le fichier jar de l'application. En utilisant les propriétés de java.util, j'ai réussi à le faire fonctionner en mode client-fils, mais à l'aide de typesafe-config, le fichier log4j.properties est complètement ignoré.Lire les propriétés de log4j avec la configuration de typeafe

C'est le log4j.properties

log4j.rootLogger=INFO, RollingAppender 
log4j.rootCategory=DEBUG, file 
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.RollingAppender.File=log/rule.log 
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd 
log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n 
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout 



log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1} %m%n 

Voici comment je récupère les propriétés. Cela devrait aller, puisque les autres propriétés sont récupérées correctement.

val log = LogManager.getRootLogger() 
val logCfgProps : Config = ConfigFactory.load("log4j.properties") 
val configLogProps = Option(getClass.getClassLoader.getResource("log4j.properties")).fold 
{ 
    log.error("log4j.properties file not retrieved. Application is shutting down") 
    ConfigFactory.load() 
} 
{ resource => ConfigFactory.load(logCfgProps)} 

Et je tente de me connecter avec

log.error("blabla") 

Sur la console, je reçois l'enregistrement à droite, mais il n'est pas écrit dans le fichier. J'ai essayé d'ajouter l'option --conf "spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties" myapp.jar a suggéré here mais cela ne fait aucune différence.

EDIT

J'ai ouvert un new question on SO sur la façon d'utiliser le configurateur de la propriété pour le faire fonctionner, je laisse cette ouverture car il était sur l'utilisation ConfigFactory.

+1

Pourriez-vous vérifier le nom du fichier dans le fichier jar? Est-ce 'log4j-executor.properties' ou' log4j.properties'? Je suis confus parce que vous avez utilisé deux noms de fichiers différents dans votre question. – zsxwing

Répondre

1

Votre code lit simplement les propriétés dans l'objet Config, mais cela n'affecte pas log4j, qui n'a aucune idée de Typesafe Config. Il devrait lire le fichier de propriétés et l'utiliser seul. Vous devez:

  1. Vérifiez que log4j.properties est dans src/main/resources et ajouté au pot correctement;
  2. Si c'est le cas, mais que la journalisation ne fonctionne pas, passez -Dlog4j.debug dans spark.executor.extraJavaOptions pour voir ce qui se passe pendant l'initialisation; Vous pouvez également utiliser explicitement PropertyConfigurator en appelant l'une de ses méthodes configure.
+0

Merci, j'ai essayé tout ce qui est écrit ci-dessus, mais vérifiez les modifications. – Irene