2016-09-21 59 views
-1

我有一個Cron和一個Webservice,都使用spring實現。 cron和webservice使用一組A,B和C類來實現它們的目標。log4j:如何將日誌導入到cron和webservice的不同文件中?

在每類中,我使用的log4j 2作爲記錄機制爲這樣:

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

在的log4j.xml,我有一個單一RollingAppender哪些日誌到文件中。

現在,我希望Cron登錄到不同的文件,即使用不同的appender。但是如果我將cron的類別設置爲使用不同的appender,那麼仍然不會導致來自A,B和C的日誌進入該appender。

更新: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在 – Farhad

+0

以上添加log4j配置如果我解決了您的問題,請將我的解決方案標記爲正確。 – cody123

回答

1

,如果你想登錄到使用同一類不同的文件可以使用如下所述的配置。

<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> 

在Java文件,你可以用這樣的:

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

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

使用此,你將能夠在兩個不同的文件發送日誌。

Ref:https://github.com/ragnar-lothbrok/log4j2-example

+0

這將登錄到2個不同的地方。但是這並不能解決我的問題。所以, CRON - >類A - > B類 - >類C =>日誌進入文件1 Web服務 - >類A - > B類 - >類C =>日誌進入文件2 基於誰打電話,日誌需要轉移。我能想到的唯一方法就是有單獨的log4j.xml文件並完全分割代碼。 – Farhad

+0

其實我沒有得到你想要達到的目標?如果你能解釋一點,將會有所幫助。你的意思是你想動態決定? – cody123