Java之Log4j入门 [V512工作室视频]

来源:互联网 发布:淘宝产品视频收费标准 编辑:程序博客网 时间:2024/05/16 08:32

一.System.out.println的局限性
   
    1.不能在运行时打开或者关闭
   
    2.不能选择包或者类,在运行的时候打开或者关闭
   
    3.输出的信息没有分级
   
    4.只能输出文本信息
   
    5.不能改变输出的位置,只能输出在控制台上.
       
   
二.log4j 基础

    1.官方网址:
        http://logging.apache.org/log4j       
   
    2.log4j的两种配置文件由下面的两个类解析
   
        解析log4j.properties :  PropertyConfigurator.configure( filePath );
       
        解析log4j.xml :  DOMConfigurator.configure( filePath );       

    3.如何得到logger
   
        (1). Logger.getLogger( Test.class );
   
        (2). Logger.getLogger("sql");  --  得到配置文件中设置的sql logger
       
三.例子

    1.一个简单的使用log4j的例子
   
        import org.apache.log4j.*;
       
        public class HelloLog4j{
            private static Logger logger = Logger.getLogger(HelloLog4j.class);
           
            public static void main(String[] args){
                StringBuffer sb = new StringBuffer(); 
                // 记录debug级别的信息
                logger.debug(sb);
                // 记录info级别的信息
                logger.info(sb);
                // 记录warn级别的信息
                logger.warn(sb);
                // 记录error级别的信息
                logger.error(sb);
                // 记录fatal级别的信息
                logger.fatal(sb);
            }
        }
       
        注: 运行这个例子时,需要log4j.properties 或 log4j.xml  --  放在src目录下.

    2.log4j.properties配置文件
   
        log4j.rootLogger=DEBUG,CONSOLE
        #rootLogger: 定义的是默认的logger,如果想自己定义到哪个包下的类的日志,可用log4j.logger.com.gdin...
        #DEBUG: 定义的日志级别是DEBUG,小于DEBUG级别的日志则不会输出
        #CONSOLE: 定义一个Appender, 该appender的具体信息如下

        # 应用于控制台
        log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
        log4j.appender.CONSOLE.Threshold=INFO
        log4j.appender.CONSOLE.Target=System.out
        log4j.appender.CONSOLE.Encoding=GBK
        #log4j.appender.CONSOLE.layout=org.apache.log4j.TTCCLayout
        log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
        log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
        #layout: 定义一个输出样式,有些不用定义它的样式,如TTCCLayout; 有些则需要,如PatternLayout

 

四.log4j核心

    1.Logger  --  Logger完成日志信息的处理
   
        注: Logger可以定义输出的层次和决定信息是否输出
       
            Logger输出的信息有优先级别的:
                ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
               
        注: 定义了哪一个层次,则小于该层次的日志不会输出.   
   
    2.Appender  --  Appender设置日志信息的去向
   
        Appender就是设置日志信息输出到中地方,可以同是指定多个输出目的地.
       
        常用的有以下几个:
            org.apache.log4j.ConsoleAppender (控制台)
           
            org.apache.log4j.FileAppender (文件)
           
            org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
           
            org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件)
           
            org.apache.log4j.WriterAppender (将日志信息以串流格式发送到任意指定的地方)
           
            org.apache.log4j.JdbcAppender (将日志信息保存到数据库中)   
   
    3.Layout  --  Layout设置日志信息的输出样式        
             
            org.apache.log4j.HTMLLayout (以HTML表格形式布局)
           
            org.apache.log4j.SimpleLayout (包含日志信息的级别和讯息字符串)
           
            org.apache.log4j..TTCCLayout (包含日志产生的时间,执行者,类别等信息)
           
            org.apache.log4j.PatternLayout (可以灵活地指定布局模式)
           
                样式:
               
                    %p : 输出优先级, 即 DEBUB, INFO, WARN 等  priority
                   
                    %r : 输出自应用启动到输出该日志信息所耗费的毫秒数  runtime
                   
                    %t : 输出产生该日志事件的线程名  thread
                   
                    %f : 输出日志信息所属的类别的类别名 
                   
                    %c : 输出日志信息所属的类的全名  classname
                   
                    %d : 输出日志时间点的日期或时间,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}  datetime
                   
                    %l : 输出日志事件的发生位置,即输出日志信息的语句排在它所在的类的第几行   line
                    
                    %m : 输出代码中指定的信息,如log(message)中的message   message
                   
                    %n : 输出一个换行符号 (这个一般都要使用,使每个日志信息为一行)     newline
     
    4.配置文件
        log4j.properties
        log4j.xml
       
        (1)log4j.properties配置
            log4j.rootLogger = DEBUG, appender1
            log4j.appender.appender1 = org.apache.log4j.ConsoleAppender
            log4j.appender.appender1.layout = org.apache.log4j.SimpleLayout
           
        (2)RootLogger
        log4j.rootLogger = [lever], appenderName1, appenderName2, ...           
        如果上面的设定将输出等级设为INFO,就表示INFO~FATAL等级的信息将会输出,DEBUG等级的信息就会被忽略
                
        (3)为某个包设定 日志配置           
            log4j.logger.com.gdin = info, appender1
            log4j.logger.com.v512 = debug, appender1, appender2           
           
        (4)设置一个名称的logger
            log4j.logger.myname = debug, appender3           
           
        (5)如果只定义了log4j.logger.com.gdin = info,即定义了它的级别,没有定义它的appender.那么它会使用rootLogger中定义的appender.               
               
        (6).log4j的命名机制
            log4j中定义的命名机制是一棵树的形式,根就是rootLogger名称节点.
            如:Logger.getLogger("com.gdin.uc.TestA"),它会先到配置文档中找名称是com.gdin.uc.TestA的,
                即定义为log4j.logger.com.gdin.uc.TestA的.如果找不到,则找com.gdin.uc的.再找不到就找com.gdin的.再找不到就找com的.再找不到就找rootLogger.
           
            即是说,这棵树就像是java中的包定义一样,所以可以为不再包下的java源文件定义不同的日志机制.
       
五.关于性能影响
   
    1. log4j对程序的运行的性能影响非常小
   
    2. 还可以通过下面的方式,降低性能影响:
        if(logger.isDebugEnabled()){
            logger.debug( "x=" + longTimeRunning() );
        }
   
六.培训 或 视频
   
    1.java软件工程师培训
        http://www.jobedu.com.cn
       
    2.免费视频下载
        http://www.jobedu.com.cn/shipin/video.html
       
        http://www.v512.com
       
    3.论坛答疑
        http://bbs.v512.com

******************************log4j.properties 完整版***********************************

一.log4j.properties 完整版
   
    转载自: http://blog.csdn.net/alex197963/archive/2008/11/07/3244912.aspx
   
        log4j.rootLogger=DEBUG,CONSOLE,DATABASE,FILE
        log4j.addivity.org.apache=true

        # 应用于控制台
        log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
        log4j.appender.CONSOLE.Threshold=INFO
        log4j.appender.CONSOLE.Target=System.out
        log4j.appender.CONSOLE.Encoding=GBK
        log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
        log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

        # 用于数据库
        log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
        log4j.appender.DATABASE.URL=jdbc:oracle:thin:@192.168.0.103:1521:ORCL
        log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
        log4j.appender.DATABASE.user=Nation
        log4j.appender.DATABASE.password=1
        log4j.appender.CONSOLE.Threshold=WARN
        log4j.appender.DATABASE.sql=INSERT INTO LOG4J(stamp,thread, infolevel,class,messages)
            VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
        # INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
        # 写入数据库中的表LOG4J的Message字段中,内容%d(日期)%c: 日志信息所在地(类名)%p:
            日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行
        log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
        log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

        # 每天新建日志
        log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
        log4j.appender.A1.File=C:/log4j/log
        log4j.appender.A1.Encoding=GBK
        log4j.appender.A1.Threshold=DEBUG
        log4j.appender.A1.DatePattern='.'yyyy-MM-dd
        log4j.appender.A1.layout=org.apache.log4j.PatternLayout
        log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

        #应用于文件
        log4j.appender.FILE=org.apache.log4j.FileAppender
        log4j.appender.FILE.File=C:/log4j/file.log
        log4j.appender.FILE.Append=false
        log4j.appender.FILE.Encoding=GBK
        log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
        log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

        # 应用于文件回滚
        log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
        log4j.appender.ROLLING_FILE.Threshold=ERROR
        log4j.appender.ROLLING_FILE.File=rolling.log
        log4j.appender.ROLLING_FILE.Append=true
        log4j.appender.CONSOLE_FILE.Encoding=GBK
        log4j.appender.ROLLING_FILE.MaxFileSize=10KB
        log4j.appender.ROLLING_FILE.MaxBackupIndex=1
        log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
        log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

        #自定义Appender
        log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
        log4j.appender.im.host = mail.cybercorlin.net
        log4j.appender.im.username = username
        log4j.appender.im.password = password
        log4j.appender.im.recipient = yyflyons@163.com
        log4j.appender.im.layout=org.apache.log4j.PatternLayout
        log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

        #应用于socket
        log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
        log4j.appender.SOCKET.RemoteHost=localhost
        log4j.appender.SOCKET.Port=5001
        log4j.appender.SOCKET.LocationInfo=true
        # Set up for Log Facter 5
        log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
        log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t
            [THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
        # Log Factor 5 Appender
        log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
        log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

        # 发送日志给邮件
        log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
        log4j.appender.MAIL.Threshold=FATAL
        log4j.appender.MAIL.BufferSize=10
        log4j.appender.MAIL.From=yyflyons@163.com
        log4j.appender.MAIL.SMTPHost=www.wusetu.com
        log4j.appender.MAIL.Subject=Log4J Message
        log4j.appender.MAIL.To=yyflyons@126.com
        log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
        log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

 

******************************log4j.xml配置**********************************

一.log4j.xml

    转载自: http://jan87215.javaeye.com/blog/630518
   
        <?xml version="1.0" encoding="GBK"?>
        <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
        <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
            <!--输出方式是:每天一个日志文件--> 
            <!--设置通道名称是:file,输出方式DailyRollingFileAppender-->
            <appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender"> 

                <!--日志文件路径和文件名称 --> 
                <!--加../在logs,加/在C盘,不加在bin目录 -->
                <!--如果在加载时设置了变量System.setProperty("WebApp", appRoot),可在此取出来${WebApp} -->
                <param name="File" value="../logs/mylog.log"/> 
               
                <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> 
                <param name="Append" value="true"/> 
             
                <!-- Rollover at midnight each day --> 
                <!-- e.g. mylog.log.2009-11-25.log -->
                <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/> 

                <!-- Rollover at the top of each hour  
                <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/> 
                --> 

                <layout class="org.apache.log4j.PatternLayout"> 
                    <!-- The default pattern: Date Priority [Category] Message\n --> 
                    <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
             
                    <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n -->
                    <!-- <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> --> 
                </layout>      
            </appender>
         
            <appender name="ERROR_LOG" class="org.apache.log4j.DailyRollingFileAppender"> 
                <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> 
                <param name="File" value="error.log"/> 
                <param name="Append" value="true"/> 
                <!-- 指定日志输出级别 -->
                <param name="Threshold" value="INFO"/> 
                <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/> 
                <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> 
                </layout> 
            </appender>
           
            <!-- level:是日记记录的优先级,优先级由高到低分为   
                 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。  
                 Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别。--> 

            <!-- 指定logger的设置,additivity指示是否叠加输出log,如果是false,
                在DsErrorLog logger中日志不会被其它logger满足条件的logger(比如root)输出 -->  
               
            <!-- 将名称为DSErrorLog的logger,输出到“EEROR_LOG”的appender  
                 所谓logger的名字也就是,在定义Logger时,构造函数的参数  
                  Logger log = Logger.getLogger("DSErrorLog");  --> 
            <logger name="DSErrorLog" additivity="false"> 
                <level class="org.apache.log4j.Level" value="DEBUG"/> 
                <appender-ref ref="ERROR_LOG"/> 
            </logger> 
                  
            <!--输出指定类包中的日志,比如想输出  
                Hibernate运行中生成的SQL语句,可作如下设置 --> 
            <category name="org.hibernate.SQL"> 
                <priority value="DEBUG"/> 
                <!-- 如果指定一个appender,这些log将被输出到指定的appender  
                    如:<appender-ref ref="myFile"/>否则将作用于所有的appender --> 
           </category> 
                      
            <!--根默认会自动构建一个 root,输出INFO级别的日志到控制台,供logger继承 -->      
            <root>      
                <priority value ="DEBUG"/>      
                <appender-ref ref="myConsole"/>      
                <appender-ref ref="myFile"/>         
            </root>         
        </log4j:configuration> 


****************************************一个比较有用的log4j应用 ***************************************8

一.log4j.xml配置实现

    转载自: http://flying3615.blog.163.com/blog/static/2830344720098119265985/

    1.先写一个Servlet的listener,用来监听服务启动,并自动解析log4j.xml文件

        代码如下:

            import javax.servlet.ServletContextEvent;
            import javax.servlet.ServletContextListener;

            import org.apache.log4j.LogManager;
            import org.apache.log4j.PropertyConfigurator;
            import org.apache.log4j.xml.DOMConfigurator;

            public class Log4jConfigListener implements ServletContextListener{
            
                public static final String CONFIG_LOCATION_PARAM = "log4jConfigLocation";
                public static final String XML_FILE_EXTENSION = ".xml";

                public void contextDestroyed(ServletContextEvent event) {
                    LogManager.shutdown();
                }

                public void contextInitialized(ServletContextEvent event) {
                    String location = event.getServletContext().getInitParameter(CONFIG_LOCATION_PARAM);
                    if (location != null) {
                        if (!location.startsWith("/")) {
                            location = "/" + location;
                        }
                        location = event.getServletContext().getRealPath(location);

                        //如果是xml结尾就用DOM解析,否则就用properties解析
                        if (location.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
                            DOMConfigurator.configure(location);
                        }else {
                            PropertyConfigurator.configure(location);
                        }
                    }
                }
            }


        2.再写个util类,用来生成所要的不同类型的日志

            代码如下:

                package com.zhaopin.util;

                import org.apache.log4j.Logger;

                public class Log4jUtil {
                
                 public static Logger getSQLLogger(){
                  return Logger.getLogger("sql");
                 }
                
                 public static Logger getBusinessLogger(){
                  return Logger.getLogger("business");
                 }
                
                 public static Logger getSimpleErrorLogger(){
                  return Logger.getLogger("simpleError");
                 }
                
                 public static Logger getNormalErrorLogger(){
                  return Logger.getLogger("normalError");
                 }

                }

 
        3.下面开始写配置文件,先要在web.xml下添加信息:

            <context-param>
                <param-name>log4jConfigLocation</param-name>
                <param-value>/WEB-INF/Log4j.xml</param-value>
            </context-param>
            
            <!-- 加载log4j配置文件 -->
            <listener>
                <listener-class>Log4jConfigListener</listener-class>
            </listener>

 

        4.最重要的log4j.xml的配置信息如下:

            <?xml version="1.0" encoding="GBK"?>
            <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
            <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
            
                <!-- 控制台输出 -->
                <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
                    <param name="target" value="System.out"/>
                    <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] (%C:%L) - %m%n"/>
                    </layout>
                </appender>

                <!-- SQL类日志 -->
                <appender name="sql" class="org.apache.log4j.DailyRollingFileAppender">
                    <param name="File" value="/usr/local/tomcat/logs/testlog4j.sql.log"/>
                    <param name="Append" value="true"/>
                   
                    <!-- name="DatePattern", 配置这条信息是让日志每天自动生成,名字尾部追加日期格式,
                        第一天生成的日志需第二天才能看到log可以通过更改系统时间来看日志的输出
                    -->
                    <param   name="DatePattern"   value="'.'yyyy-MM-dd"/>
                    <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] (%C:%L) - %m%n"/>
                    </layout>
                </appender>
                
                <!-- 业务类日志 -->
                <appender name="business" class="org.apache.log4j.DailyRollingFileAppender">
                    <param name="File" value="/usr/local/tomcat/logs/testlog4j.business.log"/>
                    <param name="Append" value="true"/>
                    <param   name="DatePattern"   value="'.'yyyy-MM-dd"/>
                    <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] (%C:%L) - %m%n"/>
                    </layout>
                </appender>
                
                <!-- 不带执行轨迹错误日志 -->
                <appender name="simpleError" class="org.apache.log4j.DailyRollingFileAppender">
                    <param name="File" value="/usr/local/tomcat/logs/testlog4j.error.simple.log"/>
                    <param name="Append" value="true"/>
                    <param   name="DatePattern"   value="'.'yyyy-MM-dd"/>
                    <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] (%C:%L) - %m%n"/>
                    </layout>
                </appender>
                
                <!-- 带执行轨迹错误日志 -->
                <appender name="normalError" class="org.apache.log4j.DailyRollingFileAppender">
                    <param name="File" value="/usr/local/tomcat/logs/testlog4j.error.normal.log"/>
                    <param name="Append" value="true"/>
                    <param   name="DatePattern"   value="'.'yyyy-MM-dd"/>
                    <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] (%C:%L) - %m%n"/>
                    </layout>
                </appender>
                    
                <!-- 下面定义logger -->
                <logger name="sql" additivity="true">
                    <priority value="info"/>
                    <appender-ref ref="sql"/>
                </logger>
               
                <logger name="business" additivity="true">
                    <priority value="info"/>
                    <appender-ref ref="simpleError"/>
                </logger>
               
                <logger name="simpleError" additivity="true">
                    <priority value="info"/>
                    <appender-ref ref="simpleError"/>
                </logger>
               
                <logger name="normalError" additivity="true">
                    <priority value="info"/>
                    <appender-ref ref="normalError"/>
                </logger>
               
                <root>   
                    <appender-ref ref="STDOUT"/>  
                    <priority value="info"/>
                </root> 
            </log4j:configuration>


        5.在程序中应用时需要编写如下代码:

            Log4jUtil.getBusinessLogger().info("message!");

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两个月的小家猫睡觉要黏人睡怎么办 成年的儿子不听话做父母要怎么办 听到孩子上课又不听话想揍他怎么办 18个月小孩脾气很犟怎么办 烦自己的孩子想弄死他怎么办 楼道经常有小孩在门口恶作剧怎么办 2岁宝宝咳嗽咳吐了怎么办 不小心把鱼刺吃下去该怎么办 儿子在学校被老师甩耳光我该怎么办 家长诬陷老师打她家孩子耳光怎么办 一岁宝宝总觉得有痰怎么办 一岁宝宝感冒咳嗽有痰怎么办 哭的时候踹不过气来应该怎么办 孩子在幼儿园被老师罚站怎么办 孩子屁股打肿了又红又紫怎么办 生完孩子两个月一直浑身疼怎么办 宝宝被蚊子叮咬后红肿硬怎么办 小孩屁股青一块紫一块打的怎么办 小孩的手被鞭子抽红了怎么办 孩子每次写作业都要挨打挨骂怎么办 儿子四岁脾气特别大怎么办呢 月子里屁股被开水烫了怎么办 学生打闹家长只找老师责任怎么办 两个学生打闹受伤的孩子家长怎么办 小孩学习不好做家长的该怎么办 对学习不入门的小孩家长该怎么办 孩子老做作业发神上课不专心怎么办 儿子成绩考得差不专心未来怎么办 五年级学生写字慢又丑怎么办 宝宝上课坐不住不听老师话怎么办 三岁宝宝特调皮打他还还手怎么办 怀孕40天不知道喝酒了怎么办 怀孕四十天的时候喝酒抽烟了怎么办 宝宝怀孕三十天左右喝酒了怎么办 两个人都喝酒了意外怀孕怎么办 不知道自己怀孕了喝了很多酒怎么办 不知道自己怀孕了喝了一次酒怎么办 我儿子11岁了有多动症怎么办 面对老师的冷暴力家长该怎么办? 面对无德的老师家长该怎么办 如果你家长屏蔽老师老师该怎么办