目前市面中应用的大多数是spring boot我的项目,上面我说的计划sring也实用。
在这里给大家举荐一套目前 最火的Java后端日志框架计划
门户日志用:slf4j
日志实现用:log4j2

具体的配置或者优化如下详情
1、导入依赖
log4j2应尽量应用同一版本,否则可能呈现不兼容的状况

    // log降级配置    compile('org.apache.logging.log4j:log4j-1.2-api:2.9.1')    compile('org.apache.logging.log4j:log4j-web:2.9.1')    compile('org.apache.logging.log4j:log4j-core:2.9.1')    compile('org.apache.logging.log4j:log4j-api:2.9.1')    // log    // compile('log4j:log4j:1.2.17')    compile('org.slf4j:slf4j-api:1.6.6')    compile('org.slf4j:slf4j-log4j12:1.7.21')

2、创立log4j2.properties
(如果有log4j.properties要删除的)
(上面还有一种应用log4j.xml的办法,两种任选其一,当初是偏向于用xml)

status = warnname = MyApp#指定输入源‘类型’为控制台appender.console.type = Consoleappender.console.name = consoleLogDemoappender.console.filter.threshold.type = ThresholdFilterappender.console.filter.threshold.level = debugappender.console.layout.type = PatternLayoutappender.console.layout.pattern = [%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%nappender.console.target = System_outappender.rolling.type = RollingFileappender.rolling.name = fileLogDemoappender.rolling.filter.threshold.type = ThresholdFilterappender.rolling.filter.threshold.level = infoappender.rolling.layout.type = PatternLayoutappender.rolling.layout.pattern = [%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%nappender.rolling.append = trueappender.rolling.fileName =/data/logs/workflow/web.logappender.rolling.filePattern=/data/logs/wokflow/web.log.%d{yyyy-MM-dd}appender.rolling.policies.type = Policiesappender.rolling.policies.time.type = TimeBasedTriggeringPolicyappender.rolling.policies.time.interval = 2appender.rolling.policies.time.modulate = trueappender.rolling.policies.size.type = SizeBasedTriggeringPolicyappender.rolling.policies.size.size=100MBappender.rolling.strategy.type = DefaultRolloverStrategyappender.rolling.strategy.max = 5logger.rolling.name = com.XXXlogger.rolling.level = infologger.rolling.additivity = falselogger.rolling.appenderRef.rolling.ref = fileLogDemo#指明根级日志的级别rootLogger.level = info#指定哪些appender输入源是根级日志的输入级别rootLogger.appenderRef.consolelogdemo.ref = consoleLogDemorootLogger.appenderRef.filelogdemo.ref = fileLogDemo

3、log4j2.xml

<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别依照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF --><!--status="WARN" :用于设置log4j2本身外部日志的信息输入级别,默认是OFF--><Configuration status="WARN" monitorInterval="30">    <!--自定义一些常量,之后应用${变量名}援用-->    <properties>        <property name="LOG_PATH">D:/logs</property>        <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%l] %p - %m%n%n"/>        <property name="INFO_LOG">info</property>        <property name="DEBUG_LOG">debug</property>        <property name="ERROR_LOG">error</property>    </properties>    <!--appenders:定义输入内容,输入格局,输入形式,日志保留策略等,罕用其下三种标签[console,File,RollingFile]-->    <Appenders>        <Console name="Console" target="SYSTEM_OUT">            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />        </Console>        <RollingFile name="DebugAppender" fileName="${LOG_PATH}/${DEBUG_LOG}.log"                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log"                     immediateFlush="true">            <!--控制台只输入level及以上级别的信息(onMatch),其余的间接回绝(onMismatch)-->            <Filters>                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>            </Filters>            <PatternLayout pattern="${PATTERN}" />            <Policies>                <TimeBasedTriggeringPolicy />                <SizeBasedTriggeringPolicy size="10 MB" />            </Policies>            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->            <DefaultRolloverStrategy max="20" />        </RollingFile>        <RollingFile name="InfoAppender" fileName="${LOG_PATH}/${INFO_LOG}.log"                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"                     immediateFlush="true">            <!--控制台只输入level及以上级别的信息(onMatch),其余的间接回绝(onMismatch)-->            <Filters>                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>            </Filters>            <PatternLayout pattern="${PATTERN}" />            <Policies>                <TimeBasedTriggeringPolicy />                <!-- SizeBasedTriggeringPolicy :文件大小滚动策略-->                <SizeBasedTriggeringPolicy size="10 MB" />            </Policies>            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->            <DefaultRolloverStrategy max="20" />        </RollingFile>        <RollingFile name="ErrorAppender" fileName="${LOG_PATH}/${ERROR_LOG}.log"                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"                     immediateFlush="true">            <!--控制台只输入level及以上级别的信息(onMatch),其余的间接回绝(onMismatch)-->            <Filters>                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>            </Filters>            <PatternLayout pattern="${PATTERN}" />            <Policies>                <TimeBasedTriggeringPolicy />                <SizeBasedTriggeringPolicy size="10 MB" />            </Policies>            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->            <DefaultRolloverStrategy max="20" />        </RollingFile>    </Appenders>    <!--定义logger,只有定义了logger并引入的appender,appender才会失效-->    <Loggers>        <!--Logger节点用来独自指定日志的模式,name为包门路,比方要为org.springframework包下所有日志指定为ERROR级别等。 -->        <logger name="org.apache.ibatis" additivity="false" level="ERROR" />        <logger name="org.apache.shiro" additivity="false" level="ERROR" />        <logger name="net.sf.ehcache" additivity="false" level="ERROR" />        <logger name="org.apache.commons" additivity="false" level="ERROR" />        <logger name="org.mybatis.spring" additivity="false" level="ERROR" />        <logger name="java.sql" additivity="false" level="ERROR" />        <logger name="org.springframework" additivity="false" level="ERROR" />        <logger name="com.alibaba.druid.filter.stat" additivity="false" level="WARN" />        <logger name="com.alibaba.druid.pool" additivity="false" level="WARN" />        <logger name="druid.sql.Connection" additivity="false" level="WARN" />        <logger name="druid.sql.DataSource" additivity="false" level="WARN" />        <logger name="druid.sql.ResultSet" additivity="false" level="WARN" />        <logger name="druid.sql.Statement" additivity="false" level="WARN" />        <!-- Root节点用来指定我的项目的根日志,如果没有独自指定Logger,那么就会默认应用该Root日志输入 -->        <Root level="INFO">            <AppenderRef ref="Console" />            <AppenderRef ref="DebugAppender" />            <AppenderRef ref="InfoAppender" />            <AppenderRef ref="ErrorAppender" />        </Root>    </Loggers></Configuration>

如果你的我的项目中应用的是老的框架,应用的是web.xml,那还要去批改
4、批改web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"         version="2.5">     <!--日志降级开始-->    <listener>        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>    </listener>    <filter>        <filter-name>log4jServletFilter</filter-name>        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>log4jServletFilter</filter-name>        <url-pattern>/*</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>FORWARD</dispatcher>        <dispatcher>INCLUDE</dispatcher>        <dispatcher>ERROR</dispatcher>    </filter-mapping>    <context-param>        <param-name>log4jContextName</param-name>        <param-value>myApplication</param-value>    </context-param>    <context-param>        <param-name>log4jConfiguration</param-name>        <param-value>classpath:log4j2.properties</param-value>    </context-param>    <!--日志降级完结-->

在web.xml中移除旧的log4j.property的配置

 <context-param>      <param-name>log4jConfigLocation</param-name>      <param-value>classpath:log4j.properties</param-value> </context-param>

5、log4j2测试
应用的LogManager.getLogger(Object.class)形式获取对象

退出测试类,并运行。如在我的项目磁盘目录下失常输入日志内容则阐明log4j2增加胜利

public class TestLogger {    private static final Logger log = LoggerFactory.getLogger(TestLogger.class);    public static void main(String[] args) {        int num=10;        log.info("8888888888888888Info : numis " + num);        log.warn("8888888888888888Warning : numis " + num);        log.debug("8888888888888888Debug : numis " + num);        log.error("8888888888888888Error : numis " + num);    }}