nginx 日志,格式化,存储,按日切割

这篇具有很好参考价值的文章主要介绍了nginx 日志,格式化,存储,按日切割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

nginx 日志介绍

nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总结了 nginx 日志相关的配置 包括 access_logrewrite_logerror_log

# 设置访问日志
access_log path 样式;  

access_log

作用域

可以应用access_log指令的作用域分别有httpserverlocation,也就是说,在这几个作用域外使用该指令,Nginx会报错。

# 该例子指定日志的写入路径为`/var/logs/nginx-access.log`,日志格式使用默认的`combined`:

access_log /var/logs/nginx-access.log combined;

log_format 指令

Nginx 预定义了名为 main 日志格式,如果没有明确指定日志格式将默认使用该格式:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

如果不想使用Nginx预定义的格式,可以通过log_format指令来自定义:

# 语法:
log_format name [escape=default|json] string ...;
  • name 格式名称。在 access_log 指令中引用。

  • escape 设置变量中的字符编码方式是json还是default,默认是default

  • string 要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量。

log_format 指令中常用的一些变量:

nginx日志按天保存,nginx,运维,服务器

下面是log_format指令中常用的一些变量:

$bytes_sent:发送给客户端的总字节数

$body_bytes_sent:发送给客户端的字节数,不包括响应头的大小

$connection:连接序列号

$connection_requests:当前通过连接发出的请求数量

$mses:日志写入时间,单位为秒,精度是毫秒

$pipe:如果请求是通过http流水线发送,则其值为“p”,否则为“.”

$request_length:请求长度

$request_time:请求处理时长

$status:响应状态码

$time_iso8601:标准格式的本地时间

$time_local:通用日志格式下的本地时间

$http_referer:请求的referer地址

$http_user_agent:客户端浏览器信息

$remote_addr:客户端IP

$http_x_forwarded_for:当前端有代理服务器时,记录web节点记录客户端地址的配置

$request:完整的原始请求行

$remote_user:客户端用户名称

$request_url:完整的请求地址
————————————————
版权声明:本文为CSDN博主「海龟同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ykyk0524/article/details/119745052

自定义日志格式的使用

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
                  
access_log /var/logs/nginx-access.log main;
server {
    
}

使用log_format指令定义了一个main的格式,并在access_log指令中引用了它。假如客户端有发起请求看一下我截取的一个请求的日志记录:

39.149.31.187 - - [12/Mar/2020:12:24:02 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; 
Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"

我们看到最终的日志记录中$remote_user$http_referer$http_x_forwarded_for都对应了一个-,这是因为这几个变量为空。

error_log 

错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。

语法:
配置错误日志文件的路径和日志级别。

error_log file [level];
Default:
error_log logs/error.log error;

file 参数指定日志的写入位置。
level 参数指定日志的级别。level可以是debug, info, notice, warn, error, crit,alert,emerg中的任意值。可以看到其取值范围是按紧急程度从低到高排列的。只有日>志的错误级别等于或高于level指定的值才会写入错误日志中。

基本用法

error_log  /var/log/nginx/error.log;

配置段:http, mail, stream, server, location作用域。

例子中指定了错误日志的路径为:/var/log/nginx/error.log,日志级别使用默认的 error

rewrite_log

ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在error log中记录重写日志。

基本语法:

rewrite_log on | off;

默认值: 
rewrite_log off;

配置段: http, server, location, if作用域。

nginx 日志配置总结

Nginx中通过access_logerror_log指令配置访问日志和错误日志,通过log_format我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过open_log_file_cache 指令来设置缓存,提升性能。其他的根据自己的使用场景定义。

自定义日志文件名

每个server一个日志文件

​server {
    listen       8001;
    set $vhost $server_name;
    server_name  域名;
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
}
access_log /var/log/nginx/${server_name}_${server_port}/${year}-${month}-${day}_access.log main;
}

​

nginx的日志文件分割

cron定时任务参考:https://liuhuiyao.blog.csdn.net/article/details/125215585

logrotate分割 

 logrotate分割日志参考Nginx利用Logrotate实现日志分割的详细过程_nginx_脚本之家 

Linux下logrotate命令使用.配置和理解_logrotate -f_junli_chen的博客-CSDN博客

利用Linux自带的logrotate管理日志_logrotate maxage_it-wangxiaobai的博客-CSDN博客

logrotate /etc/logrotate.conf:重新读取配置文件,并对符合条件的文件文件进行rotate。
logrotate -d /etc/logrotate.conf:调试模式,输出调试结果,但并不执行。
logrotate -f /etc/logrotate.conf:强制模式,对所有相关文件进行rotate。

demo1 logrotate.conf 统一扫描配置

/usr/sbin/logrotate -f /etc/logrotate.conf 每次执行都会读取/etc/logrotate.d/下得所有配置,并作响应处理。

# 查看日志所在位置
[root@localhost ~]# rpm -ql nginx |grep log
/etc/logrotate.d/nginx
/var/log/nginx


[root@localhost ~]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {                 # 指定需要轮转处理的日志文件
        su root root  #指定的账户
        daily                          # 日志文件轮转周期,可用值为: daily/weekly/yearly
        missingok                      # 忽略错误信息
        rotate 7                       # 轮转次数,即最多存储7个归档日志,会删除最久的归档日志
        minsize 5M                     #限制条件,大于5M的日志文件才进行分割,否则不操作
        dateext                        # 以当前日期作为命名格式
        compress                       # 轮循结束后,已归档日志使用gzip进行压缩
        delaycompress                  # 与compress共用,最近的一次归档不要压缩
        notifempty                     # 日志文件为空,轮循不会继续执行
        create 640 nginx nginx         # 新日志文件的权限
        sharedscripts                  # 有多个日志需要轮询时,只执行一次脚本
        postrotate                     # 将日志文件转储后执行的命令。以endscript结尾,命令需要单独成行
                if [ -f /var/run/nginx.pid ]; then     # 判断nginx的PID。# 默认logrotate会以root身份运行
                        kill -USR1 cat /var/run/nginx.pid
                fi
        endscript
}


# 执行命令: 此命令(加-f)每次执行,都会读取/etc/logrotate.d/下得所有配置,并强制rotate一个文件,按照配置备份当前得文件,并生成新的日志文件。 
[root@localhost ~]# /usr/sbin/logrotate -f /etc/logrotate.conf

# 创建计划任务: 
[root@localhost ~]# crontab -e
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

当然,可以不用再配置cron定时任务,因为Logrotate是基于CRON来运行的,其cron脚本是/etc/cron.daily/logrotate,/etc/cron.daily下的任务会每天会自动跑一次。 参考
https://cloud.tencent.com/developer/article/1681716

上述定时任务执行得 /usr/sbin/logrotate -f /etc/logrotate.conf ,每次都会扫描/etc/logrotate.d/下所有配置文件 并检查执行相关规则。


(推荐)demo2,nginx 单独的logrotate,单独得定时任务,按日分割,保留7天

确保日志文件在/usr/local/nginx/logs目录下,当前demo,在/usr/local/nginx/logs/下有access.log  ,error.log两个文件,archive目录  用于存储每天的归档文件。

创建/usr/local/nginx/conf/logrotate-nginx.conf。logrotate-nginx.conf叫什么名字都无所谓,可以是xxxx

#确保日志在此目录下
/usr/local/nginx/logs/* {
    su root root
    daily
    dateext
    rotate 7
    maxage 7
    olddir archive
    missingok
    nocreate
    sharedscripts
    postrotate
        test ! -f /var/run/nginx.pid || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
创建定时任务

在/etc/cron.d下创建cron脚本,

nginx.c

55 23 * * * root sleep `perl -e "print int(rand(120))"` && mkdir -p /usr/local/nginx/logs/archive && /usr/sbin/logrotate -v -f /usr/local/nginx/conf/logrotate-nginx.conf

 或者 root用户下 crontab -e (推荐),然后添加

59 23 * * * /usr/sbin/logrotate -f /usr/local/nginx/conf/logrotate-nginx.conf

重启cron

service crond reload

service crond restart 

/sbin/service crond start #启动服务
/sbin/service crond stop #关闭服务
/sbin/service crond restart #重启服务
/sbin/service crond reload #重新载入配置

 看日志

nginx日志按天保存,nginx,运维,服务器

demo3,nginx配置文件方式

按日分割日志

打开 conf\nginx.conf

  

#这边是自定义变量,从 $time_iso8601 这个变量中截取,以供后续使用

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;

}

access_log logs/access-$year-$month-$day.log;


这样在Logs中就会生成 名称为 access_2020-12-25.log 的日志了,当然也可以自行改成自己喜欢的。

start nginx 启动

nginx -s stop 快速停止文章来源地址https://www.toymoban.com/news/detail-698793.html

到了这里,关于nginx 日志,格式化,存储,按日切割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

    XSAN数据恢复环境: 昆腾存储,MAC OS操作系统,存放视频类数据(MXF、MOV等格式文件)。 XSAN故障检测: 将存储空间从XSAN架构迁移到STORNEXT架构后,存储空间中数据全部丢失。  故障存储中一共有9个数据卷:1个META信息卷+8个DATA信息卷。北亚企安数据恢复工程师分析META信息卷

    2024年02月05日
    浏览(37)
  • 相机存储卡格式化了数据能恢复吗,相机储存卡数据误删如何恢复

    用相机拍摄了很多的相片,但是不小心却误删了, 相机存储卡格式化了数据能恢复吗 ?有没有什么比较靠谱的解决办法呢? 相机存储卡主要是把照片放在储存卡中,然后到时候我们可以通过储存卡将照片放到电脑中。不过和其它电子设备的存储卡一样,相机存储卡在使用过

    2024年02月08日
    浏览(67)
  • vscode 无法格式化python代码、无法格式化C++代码(vscode格式化失效)另一种解决办法:用外部工具yapf格式化(yapf工具)

    神马情况,我的vscode死活不能格式化python代码,还有C++代码也不能格式化,json代码都能格式化,为啥到python、C++就不行了。。。。 (格式化json代码) (格式化python代码) 都无反应。。。 弄了半天解决不了。。。只能用外部工具解决了,就是麻烦点 搞了个外部工具yapf来格

    2024年02月05日
    浏览(46)
  • 使用vscode格式化文档无效(vue代码格式化文档无效)

    问题: 最近在写代码的时候,vscode使用格式化文档不管用。 原因: 单页面使用大量element组件和html代码导致,vscode识别不了。 解决方案: 1、 打开设置,点击右侧的图标打开settings.json文件,在文件中注入代码。 settings.json文件位置,vscode左下角:  设置页面右上角:  在

    2024年02月16日
    浏览(49)
  • DBeaver中使用外部格式化程序对进行sql格式化

    本文介绍了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序对sql进行格式化。 目录 一、pgFormatter 1.准备工作 2.DBeaver中进行配置 二、sqlprase 1.准备工作 2.在DBeaver中配置 三、sql-formatter 1.准备工作 2.在DBeaver中配置 pgFormatter本质是perl脚本,所以需要perl运行环境支

    2024年01月25日
    浏览(38)
  • 日期格式化的最佳实践:如何在Java中处理日期格式化

    当涉及到日期格式化时,了解正确的方式和最佳实践是至关重要的。 日期格式化是将日期转换为特定格式的过程,以便在应用程序开发中更好地展示、存储或交互。 以下内容展示常用的三种方式 在Java中,你可以使用java.time.format.DateTimeFormatter类来格式化日期,并将格式化后

    2024年02月07日
    浏览(48)
  • 【vscode 格式化】prettier 格式化之后添加逗号,与eslint冲突

    最近格式化文件的时候老是添加逗号,保存的时候会eslint在格式化一遍,将逗号删掉;就感觉不是很舒服; 有两种方法, 一、配置 .prettierrc 文件; 文件配置,可直接用,配合eslint使用足够了 JSON文件是不支持备注的,cv过去时要删掉注释 2.就是在设置的搜索框中输入“vet

    2024年02月12日
    浏览(60)
  • vscode中怎样格式化js代码_vscode如何格式化代码

    vs code格式化代码的快捷键如下: 在Mac上 Shift+ Option+F 在Ubuntu上 Ctrl+ Shift+I 但是自带的格式化并不能满足我的需求,这个时候,不得不说插件大法好。 代码格式化为eslint风格 需要插件:eslint

    2024年02月16日
    浏览(51)
  • vue3 codemirror关于 sql 和 json格式化的使用以及深入了解codemirror 使用json格式化提示错误的关键代码。包含了json格式化没有效果和json格式化提示错误

    后端返回一个json字符串,里面有value1、value2指定字段渲染sql语句,其他渲染json语句。 jsonlint 和 jsonlint-mod 的区别 简单理解:jsonlint校验json格式化是否有效,jsonlint-mod用来格式化后同时校验json格式化是否有效。 (1)JSONLint是一种可以验证JSON格式是否有效的工具。 它可以检查

    2024年04月28日
    浏览(55)
  • 电脑被格式化怎么恢复数据?电脑格式化后还能恢复数据吗?

    电脑的配件中,硬盘起着不可或缺的作用。它承担着储存数据的重要任务,但在日常使用过程中,电脑硬盘往往会因为各种原因格式化,有时候是误操作、有时候是分区提示格式化、有时候则是中病毒了。 而格式化之后,硬盘中的数据就会被全部清空。做好了文件备份后格式

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包