2016-09-21 9 views
-1

私はCronとWebserviceを持っています。どちらもSpringを使って実装されています。 cronとwebserviceは、目的を達成するためにクラスA、B、Cのセットを使用します。各クラスでlog4j:どのようにしてcronとwebservice用の別のファイルにログを送ることができますか?

は、私がようにロギングメカニズムとしてのlog4j 2を使用しますのlog4j.xmlで

Logger log = LogManager.getLogger(A.class.getName()); 

、私は、ファイルに記録します単一RollingAppenderを持っています。

ここで、私はCronに別のファイルにログインする、つまり別のアペンダーを使用したいと思います。しかし、別のアペンダーを使用するようにcronのカテゴリーを設定しても、それでもA、B、Cのログはそのアペンダーには入りません。

更新:log4jの設定:あなたは同じクラスを使用して別のファイルに記録したい場合は、上記構成の下に使用することができます

<Configuration status="warn" name="mylogger" packages=""> 
    <Properties> 
    <Property name="baseDir">/var/log/tomcat</Property> 
    </Properties> 
    <Appenders> 
    <RollingFile name="RollingFile" fileName="${baseDir}/app.log" 
     filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz"> 
    <PatternLayout><Pattern>%5p %d{ISO8601} [%t][%x] %c - %m%n</Pattern></PatternLayout> 
    <Policies> 
     <TimeBasedTriggeringPolicy /> 
    </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="debug"> 
    <AppenderRef ref="RollingFile"/> 
    </Root> 
</Loggers> 
</Configuration> 
+0

あなたがlog4jの設定を共有することができますか? – cody123

+0

@ cody123 log4j設定を上に追加 – Farhad

+0

私があなたの問題を解決した場合は、私の解決策を正しいものとしてマークしてください。 – cody123

答えて

1

。 Javaでは

<Appenders> 
     <Console name="CONSOLE" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 
     <RollingFile name="rollingFileAppender" 
      fileName="/data/abc.log" 
      filePattern="/data/abc-%d{MM-dd-yyyy}-%i.log"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} %-5p [%t] (%F:%L) - %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 
       <SizeBasedTriggeringPolicy size="50 MB" /> 
      </Policies> 
     </RollingFile> 
     <RollingFile name="rollingFilesAppender" 
      fileName="/data/cde.log" 
      filePattern="/data/fgh-%d{MM-dd-yyyy}-%i.log"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} %-5p [%t] (%F:%L) - %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" 
        modulate="true" /> 
       <SizeBasedTriggeringPolicy size="50 MB" /> 
      </Policies> 
     </RollingFile> 
    </Appenders> 

<Loggers> 

     <Root level="ERROR"> 
      <AppenderRef ref="CONSOLE" /> 
     </Root> 

     <Logger name="rollingFilesLogger" additivity="false" level="WARN"> 
      <AppenderRef ref="rollingFilesAppender" /> 
     </Logger> 

     <Logger name="com.log4jtest" additivity="false" level="INFO"> 
      <AppenderRef ref="rollingFileAppender" /> 
     </Logger> 

    </Loggers> 

あなたが同じように使用できるファイル:あなたは2つの異なるファイルにログを送信することができるようになりますこれを使用する

private static final Logger LOGGER = LogManager.getLogger(Hello.class); 

private static final Logger SECOND_LOGGER = LogManager.getLogger("rollingFilesLogger"); 

参考:https://github.com/ragnar-lothbrok/log4j2-example

+0

これは2つの別々の場所にログインします。しかし、これは私の問題を解決しません。だから、 CRON - >クラスA - >クラスB - >クラスA - - >クラスB - >クラスC =>ログをファイルに入って2 ベース>クラスC =>ログは1 WEB SERVICEファイルに行きます誰が呼び出しているのか、ログは流用する必要があります。私が考えることができる唯一の方法は、log4j.xmlファイルを別々にしてコードを完全に分割することです。 – Farhad

+0

実際に私はあなたが達成したいものを得ていませんでしたか?あなたがもう少し説明することができれば、助けになるでしょう。あなたは動的に意思決定をしたいのですか? – cody123

関連する問題