0

I have a service class that import and parse files from an ftp server. This task can be executed from a Spring controller when the user choose a specific action.

The same service is used by a scheduled task (TimerTask) that everyday at a specific time do the same.

I would separate logging for user / scheduled execution into different files:

logs/scheduledImport.log
logs/userImport.log

Is it possible with Log4j?

  • In log4j, you can configure logging at a package level, not sure on method level. More you can have a look at http://stackoverflow.com/questions/3920930/java-util-logging-how-to-set-level-by-logger-package-or-prefix – Arpit Aggarwal May 26 '15 at 13:48

2 Answers2

1

Of course. First you must define 2 different file appenders.

<appender name="default.file" class="org.apache.log4j.FileAppender">
    <param name="file" value="/log/userImport.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
</appender>
<appender name="another.file" class="org.apache.log4j.FileAppender">
    <param name="file" value="/log/scheduledImport.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
</appender>

Then you define your loggers:

<logger name="com.foo.UserService" additivity="false">
    <level value="debug" />
    <appender-ref ref="default.file" />
</logger>
<logger name="com.foo.ScheduledService" additivity="false">
    <level value="debug" />
    <appender-ref ref="another.file" />
</logger>
Andrei G
  • 660
  • 5
  • 12
  • 20
  • Ok masha, but UserService and ScheduledService both call the same class SameService. I would that SaveService logs go to different files. Is it possible? – Roberto Girelli May 27 '15 at 08:14
  • In this case you declare in your SameService class 2 loggers: Logger logger1=Logger.getLogger("com.foo.UserService");Logger logger2=Logger.getLogger("com.foo.ScheduledService"). And then use any logger wherever you want. – Andrei G May 27 '15 at 08:21
0

You can use different loggger instances. In this case you can apply different settings (output file) for each logger.