mybatis for log4g.xml

本文详细介绍了日志管理系统的关键配置,包括输出方式、文件大小、日志格式等,并且提供了不同场景下的应用实例。
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">   
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">   
  4.    
  5.     <!-- ========================== 自定义输出格式说明================================ -->   
  6.     <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->   
  7.     <!-- #%r 输出自应用启动到输出该log信息耗费的毫秒数  -->   
  8.     <!-- #%c 输出所属的类目,通常就是所在类的全名 -->   
  9.     <!-- #%t 输出产生该日志事件的线程名 -->   
  10.     <!-- #%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” -->   
  11.     <!-- #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  -->   
  12.     <!-- #%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)  -->   
  13.     <!-- ========================================================================== -->   
  14.        
  15.     <!-- ========================== 输出方式说明================================ -->   
  16.     <!-- Log4j提供的appender有以下几种:  -->   
  17.     <!-- org.apache.log4j.ConsoleAppender(控制台),  -->   
  18.     <!-- org.apache.log4j.FileAppender(文件),  -->   
  19.     <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->   
  20.     <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->   
  21.     <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->   
  22. <!-- ========================================================================== -->   
  23. <!-- 输出到日志文件  -->   
  24.     <appender name="filelog_appender"   
  25.         class="org.apache.log4j.RollingFileAppender">   
  26.         <!-- 设置File参数:日志输出文件名 -->   
  27.         <param name="File" value="log/testlog4jxml_all.log" />   
  28.         <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->   
  29.         <param name="Append" value="true" />   
  30.         <!-- 设置文件大小 -->   
  31.         <param name="MaxFileSize" value="1MB" />   
  32.         <!-- 设置文件备份 -->   
  33.         <param name="MaxBackupIndex" value="10000" />   
  34.         <!-- 设置输出文件项目和格式 -->   
  35.         <layout class="org.apache.log4j.PatternLayout">   
  36.             <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p (%c:%L)- %m%n" />   
  37.         </layout>   
  38.     </appender>   
  39.    
  40. <!-- 输出到日志文件 每天一个日志  -->   
  41.     <appender name="filelog_daily" class="org.apache.log4j.DailyRollingFileAppender">      
  42.         <param name="File" value="log/daily.log" />      
  43.         <param name="DatePattern" value="'daily.'yyyy-MM-dd'.log'" />      
  44.         <layout class="org.apache.log4j.PatternLayout">      
  45.             <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c:%L) - %m%n" />      
  46.         </layout>      
  47.     </appender>    
  48.    
  49. <!-- 输出到控制台中 -->   
  50.     <appender name="console" class="org.apache.log4j.ConsoleAppender">   
  51.         <layout class="org.apache.log4j.PatternLayout">   
  52.             <param name="ConversionPattern"   
  53.                 value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %m%n" />   
  54.             <!-- "%-5p: [%t] [%c{3}.%M(%L)] | %m%n" -->   
  55.         </layout>   
  56.     </appender>   
  57.    
  58. <appender name="EMAIL_QQ" class="org.apache.log4j.net.SMTPAppender">   
  59.         <param name="Threshold" value="INFO"/>   
  60.         <param name="BufferSize" value="128" />   
  61.         <param name="SMTPHost" value="smtp.qq.com" />   
  62.         <param name="SMTPUsername" value="cjjvictory" />   
  63.         <param name="SMTPPassword" value="***" />   
  64.         <param name="From" value="cjjvictory@qq.com" />   
  65.         <param name="To" value="cjjvictory@gmail.com" />   
  66.         <param name="Subject" value="测试邮件发送" />   
  67.         <param name="LocationInfo" value="true" />   
  68.         <param name="SMTPDebug" value="true" />   
  69.         <layout class="org.cjj.log4j.extend.PatternLayout_zh">   
  70.             <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m%n"/>   
  71.         </layout>   
  72.     </appender>   
  73.    
  74. <!--- 异步测试,当日志达到缓存区大小时候执行所包的appender -->   
  75.     <appender name="ASYNC_test" class="org.apache.log4j.AsyncAppender">      
  76.      <param name="BufferSize" value="10"/>      
  77.      <appender-ref ref="EMAIL_QQ"/>   
  78.    </appender>   
  79.    
  80. <!-- 设置包限制输出的通道 -->   
  81.     <category name="org.cjj" additivity="false">   
  82. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<!-- 日志输出级别,起码可以有5个级别,可以扩展自己的级别,邮件发送必须是ERROR级别不好用,所以最后自己扩展一个邮件发送级别 -->   
  83.         <level value="ERROR" />   
  84.         <appender-ref ref="filelog_daily" />   
  85.         <appender-ref ref="daily_appender" />   
  86.         <appender-ref ref="console" />   
  87.         <appender-ref ref="ASYNC_test" />   
  88. </category>   
  89.    
  90. </log4j:configuration>   
前端配置const path = require('path') function resolve(dir) { return path.join(__dirname, dir) } function publicPath() { return process.env.NODE_ENV === 'production' ? './' : '/' } module.exports = { publicPath: publicPath(), configureWebpack: { resolve: { alias: { '@': resolve('src') }, fallback: { path: require.resolve('path-browserify'), fs: require.resolve('browserify-fs'), os: require.resolve('os-browserify/browser'), timers: require.resolve('timers-browserify'), buffer: require.resolve('buffer'), stream: require.resolve('stream-browserify') } } }, lintOnSave: false, devServer: { proxy: { '/springbootw12d6cw5': { target: 'http://192.168.1.15:9090', // ✅ 只写主机 changeOrigin: true, secure: false, pathRewrite: { '^/springbootw12d6cw5': '/springbootw12d6cw5' // ✅ 保持上下文路径 } } } }, chainWebpack(config) { config.module .rule('svg') .exclude.add(resolve('src/icons')) .end() config.module .rule('icons') .test(/\.svg$/) .include.add(resolve('src/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() } } 后端配置# Tomcat server: tomcat: uri-encoding: UTF-8 port: 9090 address: 0.0.0.0 servlet: context-path: /springbootw12d6cw5 spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/db_creamics?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true username: root password: root # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootw12d6cw5 # username: sa # password: 123456 servlet: multipart: max-file-size: 300MB max-request-size: 300MB #mybatis mybatis-plus: mapper-locations: classpath*:mapper/*.xml #实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: com.entity global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 1 #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 1 #驼峰下划线转换 db-column-underline: true #刷新mapper 调试神器 refresh-mapper: true #逻辑删除配置 logic-delete-value: -1 logic-not-delete-value: 0 #自定义SQL注入器 sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other) jdbc-type-for-null: 'null' logging: level: com.tc.mapper: debug pattern: dateformat: MM-dd HH:mm:ss:SSS,nginx配置#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; # 前端项目根目录 location / { root F:/www/myapp; index index.html; try_files $uri $uri/ /index.html; # 支持 Vue history 模式 } # 代理后端 Spring Boot 接口 # ✅ 将 error_page 引用的 location 移入 server 内部 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; # 默认指向 nginx/html 目录下的 50x.html } } # === 可选:其他虚拟主机或 HTTPS server === # server { # listen 8000; # server_name somename; # ... # } # server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ... # } } 外网访问失败
最新发布
09-19
你已经完成了 **Vue 前端 + Spring Boot 后端 + Nginx 反向代理** 的完整配置,本地开发和打包部署也看似正常,但 **外网无法访问**。 我们来从整体架构出发,逐层排查问题。你的三大组件配置基本正确,但关键在于:**Nginx 的反向代理规则在 `nginx.conf` 中被注释掉了!** --- ## 🔴 根本原因:**Nginx 配置中缺失了对后端的代理规则** 你在 `nginx.conf` 中写了一半: ```nginx # 代理后端 Spring Boot 接口 ``` ✅ 这一行之后的内容(`location /springbootw12d6cw5/ { ... }`)**不见了!** 也就是说: 👉 所有请求 `/springbootw12d6cw5/xxx` 都会被当作静态资源查找,找不到就返回 `index.html` 或 404! --- ## ✅ 正确的 `nginx.conf` 应该包含如下完整代理规则 请将以下内容补全到你的 `nginx.conf` 文件中: ```nginx #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; # 前端项目根目录 location / { root F:/www/myapp; index index.html; try_files $uri $uri/ /index.html; # 支持 Vue history 模式 } # ✅ 重要:代理后端 Spring Boot 接口 location /springbootw12d6cw5/ { proxy_pass http://192.168.1.15:9090/springbootw12d6cw5/; # 保留客户端真实信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_buffering off; proxy_cache off; # 处理预检请求(CORS) if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; return 204; } # 添加 CORS 响应头 add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always; add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; } # 错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } ``` > ⚠️ 特别注意: > - `location /springbootw12d6cw5/` 必须存在 > - `proxy_pass` 地址要带上下文路径 `/springbootw12d6cw5/` > - 斜杠 `/` 要对齐,否则路径拼接错误 --- ## ✅ 确认其他关键点是否满足(缺一不可) | 条件 | 是否满足 | 检查方法 | |------|----------|---------| | ✅ 1. Spring Boot 正常运行 | ☐ | 访问 `http://192.168.1.15:9090/springbootw12d6cw5/hello` 是否返回数据? | | ✅ 2. Nginx 正常启动且无语法错误 | ☐ | 运行 `nginx.exe -t` 测试配置 | | ✅ 3. Nginx 监听了 80 端口 | ☐ | `netstat -ano \| findstr :80` 查看 LISTENING | | ✅ 4. Windows 防火墙放行 80 端口 | ☐ | PowerShell 添加入站规则 | | ✅ 5. 路由器做了 80 → 192.168.1.15:80 的端口转发 | ☐ | 登录路由器设置 NAT 映射 | | ✅ 6. 你拥有公网 IP(非 CGNAT) | ☐ | 对比 [ip.cn](https://ip.cn) 和路由器 WAN IP | | ✅ 7. 运营商未封禁 80 端口 | ☐ | 尝试改用 `listen 8080;` 测试 | --- ## 🧪 测试步骤清单(建议按顺序执行) ### 第一步:本地测试(确保基础服务正常) 1. 启动 Spring Boot 项目 2. 启动 Nginx 3. 浏览器访问: - `http://localhost/` → 应显示前端页面 ✔️ - `http://localhost/springbootw12d6cw5/user/list` → 应返回 JSON 数据 ✔️ > 如果这一步失败 → 先解决本地代理问题 --- ### 第二步:局域网内测试(验证 Nginx 是否可被访问) 用手机或其他电脑连接同一 WiFi: ```text http://192.168.1.15/ ``` ✅ 成功加载前端 → 说明 Nginx 正常对外提供服务 --- ### 第三步:外网测试(终极目标) 使用手机 4G/5G 网络访问: ```text http://你的公网IP/ ``` 📌 如何获取“你的公网IP”? - 访问 [https://ip.cn](https://ip.cn) 查看当前公网出口 IP #### ❌ 如果打不开? ##### 方案一:换端口测试(绕过运营商封锁) 修改 Nginx 监听为 `8080`: ```nginx listen 8080; ``` 然后重启 Nginx: ```bash nginx.exe -s reload ``` 并在路由器做端口映射: | 外部端口 | 内部IP | 内部端口 | |--------|--------|---------| | 8080 | 192.168.1.15 | 8080 | 再从外网访问: ``` http://你的公网IP:8080/ ``` ✅ 成功能说明是 **运营商封了 80 端口** --- ### 第四步:使用内网穿透(推荐给家庭宽带用户) 由于大多数家庭宽带没有公网 IP 且 80/443 被封,建议使用 **内网穿透工具**。 #### ✅ 推荐方案:[localtunnel](https://theboroer.github.io/localtunnel-www/) ```bash # 安装 npm install -g localtunnel # 暴露本地 80 端口 lt --port 80 ``` 输出类似: ``` your url is: https://abcd1234.loca.lt ``` 然后分享这个链接即可让外网访问你的系统! --- ## 💡 补充说明:`vue.config.js` 的作用范围 你配置的 `devServer.proxy` 是 **仅用于开发环境**(`npm run serve`),生产环境下不起作用。 ✅ 生产环境的代理必须由 Nginx 实现! 所以你现在的情况是: | 环境 | 代理由谁处理 | |------|-------------| | 开发环境 (`npm run serve`) | Vue DevServer 代理 | | 生产环境 (`npm run build` + Nginx) | Nginx 代理 | 因此你不能依赖 `vue.config.js` 来实现外网访问! --- ## ✅ 最终总结 ### 🔴 当前失败主因: > **`nginx.conf` 中缺少 `location /springbootw12d6cw5/` 代理规则!** ### ✅ 解决方案: 1. ✅ 补全 Nginx 代理配置 2. ✅ 检查防火墙、端口转发、公网 IP 3. ✅ 使用 `localtunnel` 或 `frp` 实现外网访问(适合无公网 IP 用户) --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值