2012-01-22 14 views
20

Tôi đang cố định cấu hình logrotate trong RHEL cho nhật ký tomcat6. Hiện tại, logrotate hoạt động tốt cho catalina.out log, nó được xoay và nén đúng cách.Tệp nhật ký có ngày tháng trong tên tệp

Vấn đề là với các tập tin với ngày trong họ thích:

catalina.2012-01-20.log 
catalina.2012-01-21.log 
catalina.2012-01-22.log 

Những tập tin này không được luân chuyển. Tôi hiểu rằng tôi phải cấu hình chúng trong tập tin /etc/logrotate.d/tomcat6 trong đó luân phiên cho catalina.out được cấu hình. Nhưng tôi không thể cấu hình nó.

Tất cả những gì tôi muốn là các tệp cũ hơn được nén hàng ngày, ngoại trừ tệp nhật ký ngày hiện tại.

Ai cũng có thể giúp tôi về điều này, vui lòng !!

Cảm ơn Noman A.

+1

Cùng một vấn đề, với tomcat. ghi nhật ký xem mỗi catalina. [Date] .log dưới dạng tệp khác. Nó liều không nhóm chúng như catalina.đăng nhập. Nó không quay chúng. Mỗi tệp xuất hiện dưới dạng catalina. [Data] .log.1.gz. Vì vậy, tôi kết thúc với 200 tập tin với log.1.gz ở cuối. – nelaaro

Trả lời

0

Trong đăng nhập của bạn xoay tập tin, sử dụng rotate #, trong đó # là số báo cáo mà bạn muốn giữ lại trước khi loại bỏ chúng.

xoay đếm

file Log là lần xoay trước khi bị xóa hoặc gửi đến địa chỉ được quy định trong một chỉ thị đường bưu điện. Nếu đếm là 0, các phiên bản cũ sẽ bị xóa thay vì được xoay.

+1

Cảm ơn bạn đã trả lời Paul. Tôi đang chuyển tên tệp là /var/log/tomcat6/catalina*.log. kể từ khi tên logfile không phải là conistent (nó có ngày trong nó). Và những tập tin này được cuộn qua hàng ngày theo mặc định bởi juli (mặc định của tomcat). Tôi chỉ muốn nén chúng bằng cách sử dụng logrotate, để lại nhật ký ngày hiện tại bị ảnh hưởng và không nén. Hy vọng truy vấn của tôi là rõ ràng. Cảm ơn bạn đã trả lời một lần nữa! –

+0

Nhật ký ngày hiện tại phải luôn bị bỏ hoang. Đó là những gì logrotate. Bằng cách thiết lập 'rotate #', nó sẽ loại bỏ những cái cũ sau khi # nhiều được xoay ra. Nếu bạn muốn nén chúng, hãy sử dụng lệnh 'compress' trong kịch bản xoay của bạn. http://linuxcommand.org/man_pages/logrotate8.html –

+1

Xin chào Paul, xin lỗi vì nhận xét muộn, nhưng tôi đã thử nghiệm điều này. Vì vậy, cấu hình của tôi là /var/log/tomcat6/catalina*.log { hàng ngày xoay 30 nén missingok nocreate nodateext } Vì vậy, tôi cho rằng các bản ghi nên được luân chuyển, nhưng nó không được luân chuyển. Khi tôi chạy logrotate theo cách thủ công trong chế độ tiết, có kết quả sau: "xem xét log /var/log/tomcat6/catalina.2012-01-23.log nhật ký không cần quay xem xét log/var/log/tomcat6/catalina .2012-01-24.log nhật ký không cần quay Tôi có làm gì sai không? –

9

Tôi đã dành nhiều thời gian đọc rất nhiều tài liệu. Logrotate dường như không thể nhóm các tệp khác nhau với các ngày được bao gồm trong tên của tệp. Logrotate không thể làm những gì chúng ta cần nó để làm.

Bạn có hai tùy chọn thay đổi cơ sở ghi nhật ký được cung cấp bởi java/tomcat để không bao gồm ngày trong tên tệp. http://tomcat.apache.org/tomcat-6.0-doc/logging.html

Cách thứ hai và nhanh hơn là sử dụng tập lệnh nhỏ của riêng bạn để thực hiện công việc cho bạn, sử dụng find. https://serverfault.com/questions/256218/logrotation-when-filenames-includes-date, https://serverfault.com/a/256231/71120

find/pathtologs/* -mtime +5 -exec rm {} \;

Tôi đã chọn tùy chọn thứ hai, vì nhà phát triển của chúng tôi đã mã hóa ngày tháng trong tên tệp. Vì vậy, nó cần phải ở lại như vậy. -mtime +5 bộ chỉ tìm kiếm các tệp cũ hơn 5 ngày.

Từ tài liệu của find.

Dữ liệu của tệp đã được sửa đổi lần cuối n * 24 giờ trước. Xem các bình luận cho -atime để hiểu làm thế nào làm tròn ảnh hưởng đến việc giải thích của thời gian sửa đổi tập tin.

Cập nhật theo bình luận

find/pathtologs/* -mtime 5 -delete

Nếu bạn đặc biệt muốn xóa, đây là một cách nhanh chóng để làm điều đó . Nếu bạn cần một số lệnh khác, bạn luôn có thể thay thế exec rm {} \; bằng một thứ khác.

+5

thay vì thực hiện '-exec rm {} \;', bạn cũng có thể chỉ cần thực hiện '-delete' trong nhiều phiên bản' tìm Tôi nghĩ rằng nó rõ ràng hơn –

+2

@ LászlóvandenHoek Chỉ cần chắc chắn rằng bạn đang làm điều tương tự. '-delete' không phải là' rm'. '-delete' ngụ ý' -depth'. Không giống như 'rm', nó sẽ xóa các thư mục nếu chúng trống (hoặc bị làm trống bởi lệnh), tôi đồng ý, '-delete' là tốt đẹp. Không biết nó tồn tại. Xin cảm ơn – bitsoflogic

+0

@Levinaris tốt bắt! –

1

Có thể bạn có thể xóa ngày khỏi tên tệp nhật ký như được mô tả trong How to remove the date pattern from tomcat logs để có thể sử dụng quy tắc logrotate.

Điều này làm việc cho tôi ít nhất là cho nhật ký truy cập máy chủ cục bộ.

2

/path/to/logs/*.log { missingok nén xoay 7 }

loại điều không hoạt động bình thường vì như những người khác chỉ ra tomcat có xoay log riêng của mình. Bạn có thể sử dụng một cron đơn giản để xóa các tệp cũ hoặc tắt xoay vòng trên van đăng nhập truy cập. Bằng cách tắt xoay vòng nhật ký (và có thể thay đổi tên tệp tin patter), cấu hình đăng nhập ở trên và các cấu hình tương tự khác sẽ hoạt động tốt.

Điểm mấu chốt là bạn nên sử dụng logrotate hoặc được xây dựng trong xoay log trong tomcat nhưng không phải cả hai cùng một lúc.

4

Something như thế này trong /etc/cron.d/rotate_tomcat_logs:

# delete every log file over 100 days old, and compress every log file over 1 day old. 
00 1 * * * root (find /opt/tomcat/logs -name \*log\* -name \*.gz -mtime +100 -exec rm -f {} \; >/dev/null 2>&1) 
05 1 * * * root (find /opt/tomcat/logs -name \*log\* ! -name \*.gz -mtime +1 -exec gzip {} \; >/dev/null 2>&1) 
29

(bài đầu tiên bao giờ vì vậy nếu nó trông giống như một con nhện say rượu đã được định dạng nó sau đó xin lỗi)

Sau khi sử dụng bạn của chúng tôi Google, ở đây và tôi không thể nhớ nơi khác tôi quản lý để đạt được một cái gì đó bằng cách sử dụng logrotate (chứ không phải là cron hoặc một số tương đương khác).

Tôi có một điều sau đây trong thư mục/var/log/rsync /:

-rw-r--r-- 1 root root 1.1M Apr 9 08:13 2014-04-09 07:48:18.log 
-rw-r--r-- 1 root root 1.4M Apr 11 15:20 2014-04-11 15:02:52.log 
-rw-r--r-- 1 root root 1.6M Apr 11 15:42 2014-04-11 15:22:04.log 
-rw-r--r-- 1 root root 1.8M Apr 12 08:01 2014-04-12 07:45:31.log 
-rw-r--r-- 1 root root 2.0M Apr 13 08:10 2014-04-13 07:53:38.log 
-rw-r--r-- 1 root root 2.2M Apr 14 08:19 2014-04-14 07:51:09.log 
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log 
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log 

và tập tin logrotate sau:

/var/log/rsync/*.log { 
     daily 
     rotate 7 
     compress 
     delaycompress 
     notifempty 
     missingok 
} 

mà tôi nghĩ là hoàn toàn hợp lý. Nhưng sau khi nó từ chối làm việc và tìm ra rằng nó sẽ không bao giờ làm việc (lịch sự của bài viết này) Tôi tự hỏi nếu nó có thể được fudged để làm cho nó hoạt động.

Sau nhiều thử nghiệm và tinh chỉnh tôi quản lý để giờ chót nó theo cách sau:

/var/log/rsync/dummy { 
     daily 
     rotate 0 
     create 
     ifempty 
     lastaction 
       /usr/bin/find /var/log/rsync/ -mtime +7 -delete 
       /usr/bin/find /var/log/rsync/ -mtime +1 -exec gzip -q {} \; 
     endscript 
} 

vào một tập tin cấu hình logrotate gọi /etc/logrotate.d/local-rsync.Sau đó tạo ra các tập tin đăng nhập giả:

touch /var/log/rsync/dummy 

sau đó buộc một logrotate với:

logrotate -fv /etc/logrotate.d/local-rsync 

mang đến cho:

-rw-r--r-- 1 root root 71K Apr 9 08:13 2014-04-09 07:48:18.log.gz 
-rw-r--r-- 1 root root 88K Apr 11 15:20 2014-04-11 15:02:52.log.gz 
-rw-r--r-- 1 root root 82K Apr 11 15:42 2014-04-11 15:22:04.log.gz 
-rw-r--r-- 1 root root 84K Apr 12 08:01 2014-04-12 07:45:31.log.gz 
-rw-r--r-- 1 root root 87K Apr 13 08:10 2014-04-13 07:53:38.log.gz 
-rw-r--r-- 1 root root 92K Apr 14 08:19 2014-04-14 07:51:09.log.gz 
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log 
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log 
-rw-r--r-- 1 root root 0 Apr 16 12:11 dummy 

Bây giờ chỉ cần chờ đợi cho buổi sáng ngày mai ...

Tôi nhận ra rằng cron sẽ được tidier tuy nhiên tôi có một yếu tố trong tập tin cấu hình logrotate và muốn giữ cả hai cùng nhau.

Phần thưởng với tệp giả là tệp không chiếm bất kỳ dung lượng nào!

Bạn có thể thấy rằng nó dường như không xoay bất cứ thứ gì một ngày nào đó. Nó đã cho tôi trong khi để làm việc ra lý do tại sao nhưng sau đó nó xoắn. tìm -mtime +1 là toàn bộ ngày (tức là 24 * 60 phút) và nếu logrotate hàng ngày khởi động trong chưa đầy 24 giờ kể từ lần cuối cùng thời gian các bản ghi được tạo thì đôi khi nó dường như không hoạt động. Nếu nó làm phiền bạn sau đó sử dụng 23 giờ với find-mmin + 1380 có thể thích hợp hơn.

+1

Với tùy chọn' lastaction/endscript' mà bạn đã lưu tôi! – ioaniatr

1

Để bật xoay vòng nhật ký hàng ngày trong tomcat [linux] với postfix của ngày thành tệp catalina, hãy thực hiện các thay đổi bên dưới.

Tải cronolog gói và cài đặt trong linux os

wget http://pkgs.fedoraproject.org/repo/pkgs/cronolog/cronolog-1.6.2.tar.gz/md5/a44564fd5a5b061a5691b9a837d04979/cronolog-1.6.2.tar.gz

tar -zxvf cronolog-1.6.2.tar.gz 
./configure 
make 
make install 

mở apache-tomcat-7.0.65/bin/file catalina.sh sử dụng lệnh vi và thay đổi dòng như đưa ra dưới đây dụ: /opt/apache-tomcat-7.0.65/bin/catalina.sh

shift 
touch "$CATALINA_OUT" 
# comment above line as below 
#touch "$CATALINA_OUT" 
if [ "$1" = "-security" ] ; then 
if [ $have_tty -eq 1 ]; then 
    echo "Using Security Manager" 
fi 
shift 
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
    -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ 
    -Djava.security.manager \ 
    -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ 
    -Dcatalina.base="\"$CATALINA_BASE\"" \ 
    -Dcatalina.home="\"$CATALINA_HOME\"" \ 
    -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 
    org.apache.catalina.startup.Bootstrap "[email protected]" start \ 
    #>> "$CATALINA_OUT" 2>&1 "&" 
    # comment above line and add below given line 
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" & 
else 
eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
    -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ 
    -Dcatalina.base="\"$CATALINA_BASE\"" \ 
    -Dcatalina.home="\"$CATALINA_HOME\"" \ 
    -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 
    org.apache.catalina.startup.Bootstrap "[email protected]" start \ 
    #>> "$CATALINA_OUT" 2>&1 "&"   
    # comment above line and add below given line 
2>&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" & 
fi 

Sau những thay đổi trên, hãy lưu file và khởi động lại tom mèo để áp dụng thay đổi.

0

Vâng, tôi đã không hoàn toàn hài lòng với bất kỳ câu trả lời, mặc dù những người nói rằng logrotate không hỗ trợ này (tức là chỉ để gỡ bỏ những file xoay bởi một số ứng dụng khác) kịch bản chắc chắn đúng (nâng cao một yêu cầu tính năng trên công cụ đó, có thể?).

Vì vậy, tôi muốn chia sẻ một phương pháp thay thế mà tôi đã đến. Không giống như giải pháp "find /path/to/logs -mtime +7 -delete", giải pháp này sẽ không xóa tất cả nhật ký cũ sau một khoảng thời gian được chỉ định. Vì vậy, đây nói đến, ví dụ một liner lệnh bash mà lá chỉ N bản ghi cuối cùng trên đĩa (bất cứ khi nào nó được chạy):

for f in `ls -1r | grep -E "^catalina\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.log$" | tail -n +$((N+1))`; do rm $f; done 

Cuối cùng, để bù đắp chủ đề hoàn toàn, giải pháp thay thế cuối cùng là không được xoay các tệp nhật ký (ví dụ: sử dụng rotatable=false trong trường hợp Tomcat - xem tài liệu của nó) và sử dụng số logrotate như thường lệ, nhưng đừng quên sử dụng nó với tùy chọn 'copytruncate'.

Đề xuất được hoan nghênh ...